例如下面的代码:
typedef typename std::vector<T>::size_type size_type;
查看 vector
源码可以看到:
template <class T,class Alloc=alloc>
class vector{
public:
//...
typedef size_t size_type;
//...
};
vector::size_type
是 vector
的嵌套类型定义,其实际等价于 size_t
类型。
但是,模板类型在实例化之前,编译器并不知道 vector<T>::size_type
为何物,事实上一共有三种可能:
- 静态数据成员
- 静态成员函数
- 嵌套类型
使用typename
可以明确其后面是一个类型。