typename 关键字
1、class关键字的同义词
template <typename T>
const T& max(const T& x, const T& y)
{
return x > y ? x : y;
}
2、类型名指示符
告诉编译编译器把一个特殊的名字解释成一个类型。在下列情况下必须对一个name使用typename关键字:
一、一个唯一的name(可以作为类型理解),嵌套在另一个类型中
二、依赖于一个模板参数,就是说模板参数在某种程度上包含这个name,当模板参数是编译器在指认一个类型时便会产生误解
struct StructWithBarAsValue
{
int bar;
};
template <typename T>
void foo(const T& t)
{
// 声明一个指向某个类型为T::bar的对象的指针
typename T::bar * p;
}