7

这段代码:

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

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

不编译,我想因为A<B>被解释为A<B<T> >B's 范围内。

那么,如何B在其范围内作为模板模板参数传递呢?

4

1 回答 1

13

试试这个:

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

根据 C++ 标准 14.6.1/2,您应该使用模板的正常名称(即,来自封闭范围的名称,而不是注入的类名)。

于 2010-06-16T10:53:29.213 回答