typename在C++中的用法
1.声明模板的参数
template<typename T>
class X;
T是X的一个模板参数
2. 指出下面紧跟的名称是一个类型
template <typename T> class Y
{
typename T::iterator *iter;
typedef typename T::iterator iterator; //定义了Y::iterator类型名称
...
};
在上面的一种情况中:由于typename后面的名称为T::iterator,iterator具体是类型还是成员变量取决于T的类型实现,如果传入的T为一个带有静态数据成员iterator的类,则编译器会将iterator认为是类中的一个静态成员数据。因此在以类型名称方式调用T::iterator,并使用这种类型名来定义对象时,前面必须加typename