テンプレートパラメータで指定された2Dまたは3Dに応じて、いくつかの幾何学的関数を特殊化しようとしています。問題のおもちゃバージョンの(非常に壊れた)コードを含めると最適です。
template <typename T, int d>
class Point
{
public:
int x;
int y;
int z;
T add ()
{
return T(0);
}
template <>
T add <T, 2> ()
{
return x + y;
}
template <>
T add <T, 3> ()
{
return x + y + z;
}
};
このコードは無残にコンパイルに失敗します。テンプレートパラメータ形式とクラス定義のさまざまな組み合わせを試しましたが、「T」を一般化したまま、「d」で関数の特殊化を行う方法を見つけることができません。
私の実際のソリューションでは、2Dまたは3Dの場合に特化した、グラデーション、曲率、補間などを計算しようとしています。勾配計算のように、単に「d」パラメーターを使用してforループの反復を制限できるものもあります。補間のような他のものは、2Dと3Dのために別々の機能を必要とします。
どんなヒントも大歓迎です!