一般情况下typename和class可以互换。 2,但是当需要表示某标识符是类型的时候用只能用typename而不能用class。 当要获得类的成员类型时,必须用typename 比如
template <typename T>
class MyClass {
typename T::SubType * ptr;
};
有了typeanme,SubType就被当成了T中定义的一个类型; 如果这里没有typename,SubType就会被当成一个static member, 而 * 就被当成乘法了。