0

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 のコードをコピーすることは避けたいと思います。別の方法はありますか?

4

1 に答える 1

0

Vector2DとVector3Dにアクセスできる場合は、static const int dimensions;両方に変数を追加して、でアクセスできますVectorType::dimensions

于 2012-06-02T22:03:30.933 に答える