是否有可能在C++中使用类别模板?

问题描述:

template <typename T> 
struct A 
{ 
    template <typename T1> 
    struct B {}; 
}; 

template <typename T> 
using b = A<T>::B; 

上面的代码拒绝编译。是否有可能在C++中使用类别模板?

铛给出了这样的错误: 使用类模板的 'A < T> ::型' 要求

+3

缺少类型名称的模板参数,A :: B是一种依赖类型。 – Borgleader

+0

'struct A'可以有一个模板专门化,其中'A :: B'(例如)可以是一个静态变量而不是一个类型。因此,对于编译器,您必须指定您希望'A :: B'通过在其之前写入'typename'而成为一种类型。 – KABoissonneault

因为B是模板应它提供了一个模板参数

template <typename T> 
struct A 
{ 
    template <typename T1> 
    struct B {}; 
}; 

template <typename T,typename T1> 
using b = typename A<T>::template B<T1>;