使C ++ Simulation-Class适用于2D和3D矢量

时间:2012-05-26 17:48:14

标签: c++ templates pointers vector polymorphism

我正在编程模拟。现在它应该使用2D和3D,所以我试图使我的类使用2D和3D矢量。 Vector也应该有一个模板参数来指示哪个类型应该用于坐标。

我的基类看起来像这样:

class SimulationObject {
    AbstractVector<int>* position;
    AbstractVector<float>* direction;
}

现在问题是,我不能使用多态,因为那时我的所有向量都必须是指针,这使得操作符重载几乎不可能像这样的操作:

AbstractVector<float>* difference = A.position - (B.position + B.direction) + A.direction;

但我也不能使用模板参数来指定要使用的类型:

template <typename T> class Vector2d;
template <typename T> class Vector3d;

template <class VectorType> class SimulationObject {
    VectorType<int> position;
    VectorType<float> direction;
}


SimulationObject<Vector2D> bla; 
//fails, expects SimulationObject< Vector2D<int> > for example.
//But I don't want to allow to specify
//the numbertype from outside of the SimulationObject class

那么,做什么?

1 个答案:

答案 0 :(得分:3)

您可以使用模板模板参数:

template <template <class> class VectorType> 
class SimulationObject {
    VectorType<int> position;
    VectorType<float> direction;
};