0

C++ のテンプレートとの循環依存関係について質問があります。Rotation3 と Vector3 の 2 つのテンプレート クラスがあります。回転は水平および垂直回転を保持しますが、ベクトルには xy および z コンポーネントがあります。

各クラスに他のクラスのコンストラクターを持たせたい:

Vector3<T>::Vector3(const Rotation3<T>& rot)

と...

Vector3<T>::Rotation3(const Vector3<T>& vec)

ただし、テンプレートは .cpp ファイルに配置できず、.h に配置する必要があるため、Vector3.h と Rotation3.h の両方が、コンストラクターで相互に使用するために相互にインクルードする必要があることを意味します。 . これは可能ですか?

事前に助けてくれてありがとう、私はC ++にかなり慣れていないので、経験のある人がこれをどのように設計するかを本当に知りたい.

4

3 に答える 3

1

Vector3 と Rotatio3 の両方がテンプレートである場合、テンプレートは特殊化または使用されるまでオブジェクトを生成しないため、何も起こりません (たとえば、vector3)。

構成または継承によって vector3 と Rotation3 の両方を含む別のクラスを作成し、必要に応じて使用できます。これはテンプレートの場合もあります (テンプレート Vector3、テンプレート Rotation3 > 例)

于 2013-06-28T21:54:58.957 に答える
0

いつものように、何かを宣言するだけでよく、その宣言は目的には十分かもしれません。テンプレートの宣言は他のすべての宣言と似ていますが、定義部分を除いてください。

また、テンプレート クラスのメンバー関数は、クラスの外部で定義できます。ヘッダーを分割して、クラスを定義するだけで、別の関数を実装することができます。次に、それらをインターリーブして含めることができます。

于 2013-06-28T21:53:34.063 に答える