2010-06-16 127 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

相关问题