将自己引用为模板模板参数的模板类?
问题描述:
template <template <typename> class T>
class A
{
};
template <typename T>
class B
{
A<B> x;
};
不能编译,我想因为A<B>
被解释为B
的范围内A<B<T> >
。
那么,你如何通过B
作为范围内的模板模板参数?
答
试试这个:
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
是不是简单地指定下面的工作?因为T可以是任何类型的简单或模板类型也是...........代码____ 模板 A类 { } –
Pardeep
2010-06-16 10:32:17
@Pardeep:我没有完全跟着你。 'A'的T是一个模板模板参数。这与'template class A {}'非常不同。 –
uj2
2010-06-16 10:37:54
你为什么想要?我从来没有看到任何用途。 – Puppy 2010-06-16 10:40:00