c++的一个语法:
1 | typedef typename std::vector<T>::size_type size_type; |
将typedef和typename关键字联用。
1 | template <class T,class Alloc=alloc> |
从vector的类定义可以看出,vector::size_type
是vector
嵌套类型定义,其实际等价于 size_t
类型。
1 | vector<int>::size_type ssize; |
为什么要在typedef后面加上typename关键字?
原因:
实际上,模板类型在实例化之前,编译器并不知道vector<T>::size_type
是什么东西,事实上一共有三种可能:
静态数据成员
静态成员函数
嵌套类型
那么此时typename
的作用就在此时体现出来了——定义就不再模棱两可。
typedef
创建了存在类型的别名,而typename
告诉编译器std::vector<T>::size_type
是一个类型而不是一个成员。