在template中会经常遇到这个关键字, 它有两种用法:
1. typename可在template声明中用来替换关键字class:
以前我一般都这样写:
template <class T> class MyCls;
其实可以 :
template <typename T> class MyCls;
Meyer说,这两句话中的class和typename没有任何不同,只不过typename暗示参数并非一定得是一个class类型
2. typename被用来作为类型之前的标识符号:
template <class T>
class MyCls
{
typename T::SubType *ptr;
.....
};
如果不加typename就变成了我们常用的类的静态数据成员的形式,也就是说SubType会被当成T的一个静态成员,
那么 T::SubType *ptr;就是类型T内的数值SubType与ptr的乘积
当然,任何一个用来取代T的类型,都必须提供一个内部类型SubType的定义