阅读STL源码时有两个疑问:
1.在源码中大量出现的typedef有什么用?
2.源码中所谓的type_traits(类型萃取)是个什么东西?
其实这两个问题是有相关性的,想搞懂问题2必须先解决问题1
首先看STL中如何使用typedef,并解答问题1.
//STL中typedef大多用在相关容器的迭代器的设计中
//迭代器作为容器和算法之间沟通的桥梁,其作用就是在算法对某迭代器进行操作时
//告知算法有关当前容器的基本信息,如容器类型,容器中数据的类型等
//而typedef的作用就是将各容器中的基本信息统一命名,例如容器中数据元素的类型都叫value_type
//我们先来看STL中针对不同容器的迭代器的设计
//vector类
template <class T, class Alloc=alloc> //缺省使用alloc为vector的配置器
calss vector {
public:
typdef T value_type;
typedef value_type* iterator; //vector的迭代器是普通指针
...
};
//list的迭代器源码中这样设计
template <class T, class Ref, class Ptr>
struct _list_iterator {
....
typedef T value_type;
typedef Ref reference;
typedef Ptr pointer;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
}
//deque的迭代器设计
template <class T, class Ref, class Ptr>
struct _deque_iterator {
....
typ