3
私は、数学クラスのいくつかをテンプレートに変換して初期化リストを使用し、継承したクラスが初期化時に基本クラスのデータメンバーにアクセスする必要があるときに問題に遭遇しました。ここでC++継承されたテンプレートクラスと初期化リスト
はコードです:
template <typename T>
struct xCoord2
{
T x;
T y;
xCoord2(T _x, T _y) : x(_x), y(_y) {};
};
template <typename T>
struct xCoord3 : xCoord2<T>
{
typedef xCoord2<T> B;
T z;
// All Error
xCoord3(T _x, T _y, T _z) : x(_x), y(_y), z(_z) {};
xCoord3(T _x, T _y, T _z) : B::x(_x), B::y(_y), z(_z) {};
xCoord3(T _x, T _y, T _z) : this->x(_x), this->y(_y), z(_z) {};
// Works
xCoord3(T _x, T _y, T _z) { B::x = 0; B::y = 0; z = 0; };
};
は継承したクラスで初期化リストを使用することが可能ですか?
'xCoord3'は本当に' xCoord2'ですか?または、特定のデータメンバーを共有するだけですか?これは、2つのクラスの間にis-a関係がない場合、継承が良い考えではない場合があります。 –
この例は各クラスの一部にすぎませんが、継承は2つの型の間の数学を可能にするため、ここでは非常に便利です。 –