·关键字typename用于泛型编程,在应用与模板形参时与class等价,代表声明一种类型。当在模板内部指定类型时,必须要加入typename用于告知编译器该成员表示类型。
以primer上的例子为例
template<class parm, class T>
parm fcn(parm *arry, T value )
{
parm::size_type * p;
}
这是一个fcn的模板函数,由parm::size_type 可知必定为类型的成员,但此时我们不知道这是一个什么样的成员,假设希望为一种新定义的类型成员,这时需要显示声明它才可以。 按我的理解就是如何要在类型中声明新的类型就需要使用typename。
template<class parm, class T>
parm fcn(parm *arry, T value )
{
typename parm::size_type * p;
}