3

テンプレートクラスAが次のように定義されているとします。

template <typename T>
class A
{
    B<T> b;
};

テンプレートクラスBが次のように定義されているとします。

template <typename T>
class B
{
    A<T> a;
};

理想的には、これらのクラスは、インライン実装を使用して個別のヘッダーで定義されます。ただし、これにより循環包含の問題が発生します。1つの解決策は、テンプレート化されたクラスの実装をcppファイルに入れることです。ただし、これには特殊なテンプレートのインスタンス化が必要になります。

クラスの実装をインラインに保ち、循環的な包含依存を回避する方法はありますか?可能であれば、ポインタの使用は避けたいと思います。

ありがとう、

サム

4

1 に答える 1

4

クラスを前方宣言し、ヘッダーガード(または非標準の#pragmaを1回)を使用します。 http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.11

2つのクラスが相互のオブジェクトを完全に含むことはできないことに注意してください。これは、無限のサイズのオブジェクトを表します...
http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.12

于 2012-05-03T23:10:01.843 に答える