2D と 3D の両方で動作するシミュレーションをプログラミングしています。これで、サーフェスを変更する必要があるオブジェクトが得られました。3D ではサーフェスは 2 次元配列ですが、2D では 1 次元です。テンプレート パラメーターを使用して、使用する次元空間を示します。しかし、配列の型を特殊化する場合、指定されたクラスで期待されるため、変更関数を特殊化できません。そして、すべてのメンバーを特殊なクラスにコピーする必要があります。
template <class VectorType> class SimulationObject {
void operateOnSurface();
};
template<> class SimulationObject<Vector2D> {
char* surface;
// Declaration of operateOnSurface expected here
};
template<> class SimulationObject<Vector3D> {
char** surface;
// Declaration of operateOnSurface expected here
};
template<> void A<Vector2D>::operateOnSurface() {
}
template<> void A<Vector3D>::operateOnSurface() {
}
しかし、表面配列と変更関数がそれを指定する唯一のメンバーであるため、2d と 3d のコードをコピーすることは避けたいと思います。別の方法はありますか?