私は次のものを持っています:
template<typename T> class CVector3
{
CVector3<T> &normalize();
// more stuff
};
typedef CVector3<float> Vector3f;
typedef CVector3<double> Vector3d;
基本的に、T=float の場合は構造体 Point3f を返し、T=double の場合は構造体 Point3d を返す toPoint() メソッドを追加したいと考えています。2 つの typedef を次のように置き換えてみました。
class Vector3f: public CVector3<float>
{
Point3f toPoint() const;
};
class Vector3d: public CVector3<double>
{
Point3d toPoint() const;
};
ただし、normalize() が壊れているため、これは機能しません。Vector3f を返すのではなく、Vector3f と互換性のない CVector3<float> を返します。これは、実際には基本クラスであるためです。基本クラスに normalize() およびその他の public メソッドのラッパー メソッドを追加することもできますが、これらのクラスを維持するのが面倒になるため、これは行いたくありません。
また、typedef を元に戻し、テンプレート定義の外側に追加しようとしました。
template<>
Point3f CVector3<float>::toPoint() const;
template<>
Point3d CVector3<double>::toPoint() const;
テンプレート定義内で toPoint() が宣言されていないため、これはコンパイルされません。戻り型 Point3f/Point3d のため、中に入れることはできません。
どうすればいいですか?どんな助けでも大歓迎です!