-
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