使 C++ 模拟类同时使用 2D 和 3D 向量

Posted

技术标签:

【中文标题】使 C++ 模拟类同时使用 2D 和 3D 向量【英文标题】:Making a C++ Simulation-Class work both with 2D- and 3D-Vectors 【发布时间】:2012-05-26 17:48:13 【问题描述】:

我正在编写一个模拟程序。现在它应该适用于 2D 和 3D,所以我试图让我的课程适用于 2D 和 3D 向量。此外,Vectors 应该有一个模板参数来指示坐标应该使用哪种类型。

我的基类如下所示:

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】:

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

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

【讨论】:

以上是关于使 C++ 模拟类同时使用 2D 和 3D 向量的主要内容,如果未能解决你的问题,请参考以下文章

2D特效和3D特效

索引 2D 矢量正在使我的程序崩溃

在使用矩阵进行计算时擦除 C++ 2d 向量行

OpenAL 2d 平移 C++

Shader在我的2D游戏中不能正常工作。

3d转换