C++标准库STL学习,第一天,模板(1).
时间:2011-03-13 来源:散客游
template <class T> class MyClass { typename T::SubType * ptr; ... };
这里typename 指出T::SubType 是 class T 中的一个子类型,因此ptr是一个指向T::SubType类型的指针,如果省略关键字typename那么,编译器会将T::SubType当成一个静态(static)成员,于是:
T::SubType * ptr
会被解释成T的静态成员SubType 与 ptr的乘积,实际上就是编译器认为咱书写的代码是一个静态成员和另外一个变量相乘.
T::SubType判定成一个类型的的条件是,任何一个用来取代T的类型,其内部都必须提供一个内部类型SubType的定义,例如将Q类型作为template参数:
MyClass<Q> x;
必要的条件是Q类型有如下的内部类型定义:
class Q { typedef int SubType; ... };
注意:typename中的某个标识符号指定为一种类型,就算意图显而易见,关键字typename也不能缺少,因此C++一般的规则是,除了以typename修饰之外,template内的任何标识符号都被视为一个值(value)而非一个类型.
typename还可以在template声明中来替换关键字class:
template <typename T> class MyClass { typename T::SubType * ptr; ... };
相关阅读 更多 +
排行榜 更多 +