直接上代码
template<typename T>
class A{
public:
typedef typename T::B TB;
typedef T T_type;
}
因为T是一个模版实例化时才知道的类型,所以编译器更对T::B不知所云,为了通知
编译器T::B是一个合法的类型,使用typename语句可以避免编译器报错。也就是说,如果要重命名模版T的成员,需要加typename,否则不加。
直接上代码
template<typename T>
class A{
public:
typedef typename T::B TB;
typedef T T_type;
}
因为T是一个模版实例化时才知道的类型,所以编译器更对T::B不知所云,为了通知
编译器T::B是一个合法的类型,使用typename语句可以避免编译器报错。也就是说,如果要重命名模版T的成员,需要加typename,否则不加。