Fork me on GitHub

C++ typedef typename的作用

c++的一个语法:

1
typedef typename std::vector<T>::size_type size_type;

将typedef和typename关键字联用。

1
2
3
4
5
6
7
template <class T,class Alloc=alloc>
class vector{
public:
//...
typedef size_t size_type;
//...
};

从vector的类定义可以看出,vector::size_typevector嵌套类型定义,其实际等价于 size_t类型。

1
2
3
vector<int>::size_type ssize;
//就等价于
size_t ssize;

为什么要在typedef后面加上typename关键字?

原因:

实际上,模板类型在实例化之前,编译器并不知道vector<T>::size_type是什么东西,事实上一共有三种可能:

静态数据成员
静态成员函数
嵌套类型

那么此时typename的作用就在此时体现出来了——定义就不再模棱两可。

typedef创建了存在类型的别名,而typename告诉编译器std::vector<T>::size_type是一个类型而不是一个成员。

您的鼓励是我持之以恒的动力