c++注意点(5)----模板
·
C++ 中 typename 和 class 的区别
在 C++ Template 中很多地方都用到了 typename 与 class 这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?
相信学习 C++ 的人对 class 这个关键字都非常明白,class 用于定义类,在模板引入 c++ 后,最初定义模板的方法为:
template<class T>......
这里 class 关键字表明T是一个类型,后来为了避免 class 在这两个地方的使用可能给人带来混淆,所以引入了 typename 这个关键字。使用 typename 更清晰,因为它不暗示 T 必须是类类型(T 可以是基本类型如 int)。它的作用同 class 一样表明后面的符号为一个类型,这样在定义模板的时候就可以使用下面的方式了:
template<typename T>......
但是其实还是有区别的。看下列代码:
template <typename T>
class MyClass {
public:
void func() {
typename T::Iterator* ptr; // 使用 typename 声明 T::Iterator 是一个类型
// ...
}
};
当在模板中引用一个依赖于模板参数的类型时,必须使用 typename 关键字(除非是基类列表或成员初始化列表)。若不使用 typename,编译器会认为 T::Iterator 是一个静态成员(如变量或枚举值)。
更多推荐


所有评论(0)