1.迭代器
迭代器提供了一种方法,使之能够依序巡访某个容器的各个元素,而无需暴露容器的内部。
STL的中心思想是容器和算法分开,最后再用迭代器将两者完美的融合到一起。而迭代器是实现中最关键的部分。
迭代器是一种行为类似指针的对象,因此它必不可少的就是对operator*和operator ->的重载。可以参考auto_ptr。
2.traits技法(重点)
在effective C++中,条款47介绍到了traits技术。它的思想是通过提取出来某些类型的特性,然后根据它的特性进行某些操作。
一种方法是通过内嵌类来表示类型的特性,然后在进行操作的时候进行判断,然而这种方法却不能对内置类型使用。因为我们不可能向内置类型加入内嵌类以表示它的特性。
另一种方法表示如下(在别人blog里面看到一个类似例子,自己写了一下):
这种方式通过把类的traits信息放到类的外部,从而可以通过偏特化将内置类型的traits融入进去。
在STL中,迭代器对应的traits类为iterator_traits
为了能够表示内置类型如int *, const int *等的特性,所以要设计相应的特化版本。下例是I*的特化。
从此可以看出,在设计迭代器的时候一定要提供五个内嵌的相应型别。以利于traits萃取。STL提供了一个iterators class供人继承,可以保证其符合规范。
这个是SGI内部的,不在STL标准内。用来萃取性别的特性。先定义两个空结构体,用来标识true和false。
__type_traits内则定义一些typedefs,其值为__true_type或者__false_type