Boost Iterator facade和Iterator adaptor源码分析

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的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

键盘独行侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值