Skip to content

Latest commit

 

History

History
31 lines (25 loc) · 1.01 KB

File metadata and controls

31 lines (25 loc) · 1.01 KB

std::iterator 的保证

为了使 traits 萃取顺利进行,STL 提供了一个 std::iterator class 如下,如果每个新设计的迭代器都继承自它,就可保证符合 STL 所需的规范:

template <class Category
          class T,
          class Distance = ptrdiff_t,
          class Pointer = T*,
          class Reference = T&>
struct iterator {
    typedef Category iterator_category;
    typedef T value_type;
    typedef Distance difference_type;
    typedef Pointer pointer;
    typedef Reference reference;
};

由于后三个参数都有默认值,故新的迭代器只需提供前两个参数即可。3.2 节的 ListIter 如果改用正式规格,应该这么写:

template <class Item>
struct ListItem :
  public std::iterator<std::forward_iterator_tag, Item> 
{...};

总结

traits 编程技法大量运用于 STL 实现中。它利用“内嵌类型”的编程技巧与编译期模板参数推导的功能,增强 C++未能提供的关于类型认定方面的能力。