下面来看一个例子:
template <class T>
void function()
{
T::iterator *iter;
.....
}
对这个例子而言 编译器可以认为这是个乘法,T中的iterator变量×iter。
为了告诉编译器,这不是个变量,而是个类型,所以就加上typename
typename的作用就是告诉编译器 后面的这个东西是个类型,所以可以写成
template <class T>
void function()
{
typename T::iterator *iter;
.....
}
再来看一个复杂的,如果跟着typedef一起用
typedef typename _Iterator::value_type value_type;
这句话其实就是告诉编译器把_Iterator::value_type这个类型换成value_type