- typedef typename iterator_traits<_Iter>::value_type value _type;
1:简介typename
typename iterator_traits<_Iter>::value_type是类型名;但是感到困惑的是这里为什么要使用typename关键字?
typename在C++类模板或者函数模板中经常使用的关键字,此时作用和class相同,只是定义模板参数
typename在下面情况下禁止使用:
- 模板定义之外,即typename只能用于模板的定义中
- 非限定类型,比如int,vector<int>之类
- 基类列表中,比如template <class T> class C1 : T::InnerType不能在T::InnerType前面加typename
- 构造函数的初始化列表中
如果类型是依赖于模板参数的限定名,那么在它之前必须加typename(除非是基类列表,或者在类的初始化成员列表中)。
2:Traits编程技术
在 STL 编程中,容器和算法是独立设计的,即数据结构和算法是独立设计的,连接容器和算法的桥梁就是迭代器了,迭代器使其独立设计成为可能。 Traits 编程技术是STL中最重要的编程技术,Traits可以获取一个类型的相关信息。
若我们要知道用户自定义类型的函数返回值类型,我们可以使用内嵌型别技术就可以知道返回值的类型;看下面程序:
- templates <class T>
- struct Iterator
- {
- typedef