在模编程中,可以说关键字class和typename是等效的,但是typename还有其他的用法,typename可以用于指明模板内的为类类型。
对于以下的函数模板,假如是这样做设计的。
对于编程的人而言,我们清楚的知道```C::const_iterator *x`` 是一个指向迭代器的指针,但是对于编译器则不然,因为如果当C的类中有静态变量为const_iterator,或者有一个局部变量为X的变量,那么上述的语句将会理解为两个数相乘。
对于依赖于模板参数的类类型参数,我们称为嵌套从属类,也就是形如```C::const_iterator *x`` ,这样的。
如果编译器遇到嵌套从属类,编译器会假设他为非类的类型,除非用typename显示的指定
指定方式如下:
只有在嵌套从属类的前面才能用typename指定其为类的类型。
例外:
对于嵌套从属类,不能在初始化成员列表和继承列表使用typename指定。