2010-06-16 139 views
7

此代碼:將自己引用爲模板模板參數的模板類?

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

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

不能編譯,我想因爲A<B>被解釋爲B的範圍內A<B<T> >

那麼,你如何通過B作爲範圍內的模板模板參數?

+0

是不是簡單地指定下面的工作?因爲T可以是任何類型的簡單或模板類型也是...........代碼____ 模板 A類 { } – Pardeep 2010-06-16 10:32:17

+0

@Pardeep:我沒有完全跟着你。 'A'的T是一個模板模板參數。這與'template class A {}'非常不同。 – uj2 2010-06-16 10:37:54

+0

你爲什麼想要?我從來沒有看到任何用途。 – Puppy 2010-06-16 10:40:00

回答

12

試試這個:

template <typename T> 
class B 
{ 
    A<::B> x; // fully qualified name for B 
}; 

根據C++標準14.6.1/2,你應該使用模板的正常名稱(即從封閉範圍內,而不是注入的類名名) 。

+0

謝謝。那樣做了。 – uj2 2010-06-16 11:00:34

+5

不錯:)值得注意的是':: B'之前的空間是需要的,但:) – 2010-06-16 22:15:55

相關問題