对traits技法比较熟的大虾们进来判断一下我的总结
当你想将自建型别作为STL的扩展,为STL容器、算法针对此型别作效率的最大强化,
哪应该改写哪些东西?
一、iterator_traits
首先,你必需为创建一个iterator_traits目录表,说明这个对像型别支持何种concepts:input_iterator?forward_iterator?random_access_iterator?这些concept的category你都应该typedef好,
以便stl的traits类别、概念萃取机能正常地把它萃取出来,具体方法就是在类体定加入几个typedef
typedef user_type value_type
typedef value_type* iterator
...
typedef input_iterator_tag iterator_category
然后,STL各大算法便可以以这种方法萃取出你的类型相关的资料:
__advance( i , n , iterator_category( user_type ) );//萃取concept.
typename iterator_traits<user_type*>::value_type//萃取型别资料
二、STL的私房菜:__type_traits
这个很简单,你只要为__type_traits<T>做一个偏特化版本,说明这个具备型别哪些特性:
是否pod类型?有没有destructor?有没有default/copy constructor?有没有assignment operator?当重载了以后,STL的各大算法、各大容器就可以俾这个萃取出适当的concept以供给各大重载版本,对算法更加强化其效率!
--------------------------
看了STL源码剖析半个小时得出的结论,
希望 觉得对traits技术比较熟愁的大虾给予指证
我说得对吗?偶分不多,先给50