我有一个具有两个模板参数的模板类
template <class T, class U> class A /* ... */
另一个模板类接受带有两个参数的模板类作为模板参数。
template <class T, class U, template<class X, class Y> class Z>
class B
{
typedef typename Z<T,U>::pointer pointer;
};
是否不可能在 Z 为 A 的 A 中创建 B 的实例?
template <class T, class U>
class A
{
public:
B<T,U,A> foo (void) // compiler complaining here
{
B<T,U,A> test; // and here
return test;
}
};
做同样事情的自由函数根本没有问题。
template<class T, class U>
B<T, U, A> bar (void)
{
B<T,U,A> test;
return test;
}
换句话说:是否有任何规则我还没有失败,阻止我使用我所在的类的名称作为模板参数?
代码是:
template <class T, class U, template<class X, class Y> class Z>
class B
{
typedef typename Z<T,U>::pointer pointer;
};
template <class T, class U>
class A
{
public:
B<T,U, A> foo (void)
{
B<T,U,A> test;
return test;
}
};
template<class T, class U>
B<T, U, A> bar (void)
{
B<T,U,A> test;
return test;
}
int main (void)
{
return 0;
}
MSVC 2012 编译器给出了Compiler Error 3200。
'A<T,U>' : invalid template argument for template parameter 'Z', expected a class template