STL中typename关键字的两个作用
1 在类型定义时申明某个关键字是类型(如int)
2 在template声明模板中代替class
一 在类型定义时申明某个关键字是类型
例如:
template <class T>
class firstclass {
typedef T firstclass_T; //在模板类firstclass中把T类型重命名为 firstclass_T
.........
};
template<class T>
class secondclass{
typename T::firstclass_T val; //在secondclass中用T类中的firstclass_T类型来定义变量
时用到关键字typename。其作用就是对C++编译器
声明其后的关键字是类型名,用于定义变量。这样写
要保证类型T中一定存在firstclass_T类型。
.........
};
void main()
{
secondclass < firstclass<int> > second;
}
二 在template声明模板中代替class
template <class T> 也可以写成 template <typename T>。
原因是由于关键字class和类关键字class相同为了避免歧义引入typename。typename在
STL产生很久后才出现这个关键字。