Iterator_facade(使用外观模式的Iterator定义的辅助类)
Iterator_facade定义了数个迭代器的核心接口,用户只需实现这些核心功能就可以编写正确且完备的迭代器。
Iterator_facade要求用户自定义迭代器必须实现的五个功能(具体根据迭代器类型而异)
- 解引用: deference(),实现可读和可写迭代器必须
- 相等比较: Equal(),实现单遍历迭代器必须
- 递增: increment(),实现递增和前向遍历的迭代器必须
- 递减: decrement(),实现双向迭代器必须
- 距离计算: distance()和distance_to(),实现随机访问迭代器必须
template <
class Derived //继承iterator_facade_base或iterator_facade_base的子类实现的自定义迭代器
, class Value //迭代器值类型
, class CategoryOrTraversal //迭代器对应的概念Tag类型
, class Reference //迭代器的引用类型
, class Difference //迭代器的距离类型
, bool IsBidirectionalTraversal //是否为双向迭代器
, bool IsRandomAccessTraversal //是否为随机迭代器
>
class iterator_facade_base; //iterator_facade_base前置声明
template <
class Derived // The derived iterator type being constructed
, class Value
, class CategoryOrTraversal
, class Reference = Value&
, class Difference = std::ptrdiff_t
>
class iterator_facade :
public detail::iterator_facade_base<
Derived,
Value,
CategoryOrTraversal,
Reference,
Difference,
detail::is_traversal_at_least< CategoryOrTraversal, bidirectional_traversal_tag >::value,
detail::is_traversal_at_least< CategoryOrTraversal, random_access_traversal_tag >::value
>
{
protected:
// For use by derived classes
typedef iterator_facade<Derived,Value,CategoryOrTraversal,Reference,Difference> iterator_facade_;
};
可以看出iterator_facade 的主要功能是在iterator_facade_base中定义的,iterator_facade只是通过detail::is_traversal_at_least提供了对CategoryOrTraversal的判断,以编译期间动态决定iterator_facade 是继承iterator_facade_base的