2012-05-03 33 views
3

假設模板類A被定義爲如下:環狀模板

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

假設模板類B被定義如下:

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

在理想情況下,這些類將被與內聯的實現獨立的頭文件中定義。但是,這會導致循環包容問題。一種解決方案是將模板類的實現放入cpp文件中。但是,這需要專門的模板實例化。

有沒有辦法保持內聯類的實現並避免循環包含依賴?如果可能的話,我想避免使用指針。

感謝,

山姆

+0

您不能這樣做,因爲它需要無限量的內存。你必須在這裏使用指針或引用。 – 2012-05-03 23:13:16

+0

@classdaknok_t是的,我認爲你是對的。我可能需要使用指針... –

回答

4

轉發聲明類和用頭衛士(或非標準的#pragma一次)。 http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.11

請注意,兩個類不能完全包含對方的對象。這將描述無限大小的物體...
http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.12

+0

如果他持有指向另一個類的指針(或引用),那麼不會轉發聲明這個類只工作嗎? – SirGuy

+0

是的,一個類至少必須用指針或引用引用另一個。無論如何,這將是一個非敏感的東西,因爲它會描述一個無限大的物體。 http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.12 – log0