普通模板声明中typename和class的用法一样,如下:
template<typename T>
class test_typename{
};
template<class T>
class testclass{
};
typename的第二种作用是用来指定相应名称为类型,如下代码则会出现编译错误;
template<typename visitor>
class test{
public:
/*编译器无法判断visitor::type是成员变量还是类型,而typedef只能用于类型*/
typedef visitor::type type;
}
需要在typedef后面加上typename进行声明;
template<typename visitor>
class test{
public:
typedef typename visitor::type type;
}