是否有可能在C++中使用类别模板?
问题描述:
template <typename T>
struct A
{
template <typename T1>
struct B {};
};
template <typename T>
using b = A<T>::B;
上面的代码拒绝编译。是否有可能在C++中使用类别模板?
铛给出了这样的错误: 使用类模板的 'A < T> ::型' 要求
答
因为B是模板应它提供了一个模板参数
template <typename T>
struct A
{
template <typename T1>
struct B {};
};
template <typename T,typename T1>
using b = typename A<T>::template B<T1>;
缺少类型名称的模板参数,A :: B是一种依赖类型。 –
Borgleader
'struct A'可以有一个模板专门化,其中'A :: B'(例如)可以是一个静态变量而不是一个类型。因此,对于编译器,您必须指定您希望'A :: B'通过在其之前写入'typename'而成为一种类型。 –
KABoissonneault