可能是C++的设计者(BJ?)觉得没用必要引入更多的关键字,其实模板刚刚引入C++中的时候并没有typename关键字。那时候定义类模板的类型参数通常使用class关键字。如:
template<class T>
class Test
{
public :
T t;
.....
};
随着模板应用的推广,大家发现使用typedef非常关键,因为实例化后的模板定义通常很长,通过使用typedef可以有效的缩短代码长度。如:
class UseTest
{
public:
typedef Test<int> intTT;
...
};
这时问题就来了,当我写UseTest::intTT,这个intTT究竟是UseTest的一个静态成员(static)还是一个类型呢?所以typename关键字就引入了C++。
所以在定义一个intTT的对象时,我们就要这样写:
typename UseTest::intTT int_tt_obj;
通过typename明确指出intTT是一个类型而不是一个静态成员。