typename主要作用是告诉complier一个“变量”是一个新的“类型”。
比如:
错误的代码:
template <typename T>
void foo(const T& t)
{
// 声明一个指向某个类型为T::bar的对象的指针
T::bar * p;
}
正确的代码:
template <typename T> void foo(const T& t) { // 声明一个指向某个类型为T::bar的对象的指针 typename T::bar * p; }