メソッドテンプレートを持つクラスがあるとします。
//file: X.h
class X{
int x;
//... more members and non-template functions
template<typename T>
void foo(T t){ //Error, cannot define the method here. Declaration is okay
Y y = ...;
}
}
//file Y.h
class Y {
X x;
}
循環クラスの依存関係(fooの本体はYに依存し、YはXに依存する)のため、foo
宣言した場所のメソッドテンプレートを定義できません(今すぐ設計に疑問を持たないでください)。
foo
では、この場合の定義はどこに置くのでしょうか?他の定義に.cppファイルに入れることができないか、リンクが失敗します。
私の解決策は、「X.hpp」などの新しいヘッダーファイルを作成し、それにテンプレートメソッドの定義のみを追加することです。このファイルには、「Xh」と「Yh」が含まれています。これで、クラスXが必要なときはいつでも、「X.hpp」だけを含めるだけで、他の必要なhファイルが含まれます。
だから私の質問は:これはそれを行うための正しい/最良の方法ですか?単一のメソッドテンプレート定義のみの.hppファイルがあるのはどういうわけか私を悩ませますが、循環型の依存関係の場合に可能な唯一の方法のようです。もう一度お願いします。「循環型の依存関係を避けるのが最善だ」などと言ってデザインに疑問を投げかけないでください。問題は、これらの依存関係がある場合、単一のメソッドテンプレートを処理するための最良の方法は何ですか。