我有以下内容:
template<typename T> class CVector3
{
CVector3<T> &normalize();
// more stuff
};
typedef CVector3<float> Vector3f;
typedef CVector3<double> Vector3d;
我基本上想添加一个方法 toPoint(),如果 T=float 则返回 struct Point3f,如果 T=double 则返回 struct Point3d。我尝试将两个 typedef 替换为:
class Vector3f: public CVector3<float>
{
Point3f toPoint() const;
};
class Vector3d: public CVector3<double>
{
Point3d toPoint() const;
};
但是,这不起作用,因为现在 normalize() 已损坏:它不再返回 Vector3f,而是返回与 Vector3f 不兼容的 CVector3<float>,因为它实际上是基类。我可以为 normalize() 和基类中的任何其他公共方法添加包装器方法,但我不想这样做,因为它会使维护这些类变得乏味。
我还尝试将 typedef 放回并在模板定义之外添加:
template<>
Point3f CVector3<float>::toPoint() const;
template<>
Point3d CVector3<double>::toPoint() const;
这不会编译,因为 toPoint() 没有在模板定义中声明。由于返回类型 Point3f/Point3d,我无法将其放入其中。
我该怎么做呢?任何帮助是极大的赞赏!