我有以下幾點:C++:擴展模板類
template<typename T> class CVector3
{
CVector3<T> &normalize();
// more stuff
};
typedef CVector3<float> Vector3f;
typedef CVector3<double> Vector3d;
我基本上要添加一個方法,尖山(),它返回一個struct Point3f如果T = float和一個結構三維點如果T =雙重。我試着用替換兩個類型定義:
class Vector3f: public CVector3<float>
{
Point3f toPoint() const;
};
class Vector3d: public CVector3<double>
{
Point3d toPoint() const;
};
這是不行的,但是,因爲現在歸()被打破:它不再返回Vector3f,但CVector3 <浮動>,這與Vector3f不兼容,因爲它實際上是基類。我可以爲基類中的normalize()和任何其他公共方法添加包裝器方法,但我不想這樣做,因爲這會使這些類保持乏味。
我也試圖把類型定義回並添加模板定義之外:
template<>
Point3f CVector3<float>::toPoint() const;
template<>
Point3d CVector3<double>::toPoint() const;
這並不編譯,因爲尖山()沒有模板定義內部聲明。由於返回類型Point3f/Point3d,我無法將其放入內部。
我該怎麼做?任何幫助是極大的讚賞!
''Point3f/Point3d'實例化嗎? – jrok
不,它們是簡單的結構。 –
也許CRTP ...? –