2012-05-03 4 views
3

と仮定テンプレートクラスAが定義されている次のよう環状テンプレート次のように

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

と仮定テンプレートクラスBが定義されている:

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

理想的には、これらのクラスは、インライン実装と別のヘッダに定義されます。しかし、これは周期的な包含問題を引き起こす。 1つの解決策は、テンプレート化されたクラスの実装をcppファイルに入れることです。しかし、これには特殊なテンプレートのインスタンス化が必要です。

クラスのインライン化の実装を維持し、循環的なインクルードの依存関係を避ける方法はありますか?私はそれが可能な場合は、ポインタを使用しないようにしたいと思います。

おかげで、

サム

+0

無限大のメモリが必要なので、これを行うことはできません。ここでポインタや参照を使用する必要があります。 –

+0

@classdaknok_tはい、あなたは正しいと思います。私はポインタを使用する必要があるかもしれません... –

答えて

4

は前方にあなたのクラスと使用ヘッダーガード(または非標準の#pragma一回)を宣言します。 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

+0

クラスを宣言することは、他のクラスへのポインタ(または参照)を保持していた場合にのみ動作しますか? – SirGuy

+0

はいクラスの少なくとも1つは、ポインターまたは参照で他を参照する必要があります。とにかくそうでなければ、それはそれが無限大の物体を記述するので、それは非感覚であろう。 http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.12 – log0

関連する問題