迭代器的相应类型value_type,例:vector<int>::iterator it;迭代器it的类型实际为int *,而这里迭代器的相应类型是指int,,即这里迭代器的相应类型是指迭代对象的类型。
在使用迭代器时,有时可能需要使用迭代器的相应类型value_type,例如当某函数中使用迭代器,需要返回value_type类型的值,而此时我们只知道迭代器的类型,怎么获得该迭代器的value_type?
STL中解决该问题方法:
在STL中定义迭代器时,同时有声明内嵌类型value_type,即:
1 template <class T> 2 struct iterator { 3 typedef T value_type; //声明内嵌类型value_type 4 T *ptr; 5 }; 这样在上述需求时可类似如下使用:
1 template <class I> 2 typename I::value_type //返回值类型 3 func_exp(I iter) { 4 return *iter; 5 }
但当原生指针作为迭代器时,我们无法为其声明内嵌类型 value_type,因为我们没有该迭代器的定义。
即出现两种情况,原生指针作为迭代器和自定义 class type 迭代器,获得其value_type时不可以同一种方法获得。
这时可使用 traits 编程技巧,可将其获取value_type独立出来,使用模板偏特化来解决上述两种不同情况:
1 template <class I> 2 struct iterator_traits { 3 typedef typename I::value_type value_type; 4 }; 5 6 template <class T> 7 struct iterator_traits<T*> { //为原生指针作为迭代器时特化版本 8 typedef T value_type; 9 }; 这时再使用value_type时,如下,可解决原生指针获取value_type的问题:
1 template <class T> 2 iterator_traits<T>::value_type //返回值类型,使用iterator_traits推测value_type类型 3 func(T iter) { 4 return *iter; 5 } traits "特性萃取机":

来源:博客园
作者:大白的攻城狮
链接:https://www.cnblogs.com/dabai56/p/11432854.html