2013-11-25 34 views
0

我試圖聲明類B,如下面所寫。問題是,據我所知,A<B, T1>實際上隱含地認爲是A<B<T1>, T1>,它不符合A類定義。因此,我的問題是:是否有可能在其自己的定義中使用類B,在其「模板非實例化」形式中?如果是的話如何?防止類模板中的隱式實例

template <template <class T1> class T2, class T1> 
class A { 

}; 

template <class T1> 
class B { 
A<B, T1>* example; 
}; 

這導致以下編譯錯誤與gcc4.2:

錯誤:在模板參數列表參數1類型/值不匹配「的模板<模板<類T1> T2類,類T1 > A級」

錯誤:預期類模板,得到了 'B < T1>'

+0

也許策略克隆習語是你的東西 – PlasmaHH

+2

你能給我們一個完整的例子,無法編譯或至少告訴我們哪個編譯器無法編譯這個?當我添加一個'main'來實例化'B '它用g ++ 4.4和4.5編譯得很好。 –

+0

「問題是,據我所知...」 - 沒有錯誤信息,沒有問題。 –

回答

0

這似乎是在G ++中的錯誤 - 4.2因爲我可以用編譯器重現您的問題。

如果您可以移動到至少4.4,您的代碼將按原樣編譯。或者,您可以編寫A< ::B, T1>* example;以強制其使用全局範圍模板,該模板在4.2中編譯。