文章目录
1.typename
- 1.typename
- 2.作者答疑
在函数模板和类模板参数中,typename关键词和class关键词的作用一致。
template
class Class1{};
template
class Class1{};
在模板中,它还有另外一种作用,辅助申明名称为类型。 这个使用还与typedef相关,当采用typedef定义一个类型,如果定义的内容依赖于模板参数时,就必须在内容前加typename关键词表示这是一个类型而不是变量。不加编译器会报错,这种使用场景在标准的泛型函数库里非常常见,范例代码如下:
template
class Class1{
public:
/*此处将报错,因为编译器不确定T::tType 是一个类型还是一个成员变量,而typedef只能作用于类型。*/
typedef T::tType _tType;//错误写法
typedef typename T::tType _tType;//正确写法写法
};
由于模板定义时不知道T::tType 是T的成员类型还是成员变量,其依赖于模板Temp实例化时传入的参数T,所以是依赖性名称,编译器会强制要求在前面加上typename。
2.作者答疑如有疑问,请留言。