简体   繁体   English

提升迭代器外观和dereference()函数

[英]boost iterator facade and dereference() function

I'm trying to create an iterator which only can dereference to real value types, not to references. 我正在尝试创建一个迭代器,它只能取消引用实际值类型,而不是引用。 Is this possible using boost::iterator_facade , or does it require me to have values that can be returned by adress\\reference. 这可能是使用boost::iterator_facade ,还是要求我拥有可以由adress \\ reference返回的值。

To be more specfic, my iterator returns a std::pair of references, which means my iterators value_type is not stored anywhere, but created on the fly on dereferencing (like std::map::iterator ). 为了更具说明性,我的迭代器返回一个std::pair引用,这意味着我的迭代器value_type不会存储在任何地方,而是在解除引用时动态创建(如std::map::iterator )。

Yes, thing you want is possible. 是的,你想要的东西是可能的。 Please, take a look at boost/iterator_facade.hpp (example is for Boost lib of version 1.49.0 but it is ok for its new distributions also): 请看一下boost/iterator_facade.hpp (示例是针对版本1.49.0的Boost lib,但它的新发行版也可以):

  template <
    class Derived
  , class Value
  , class CategoryOrTraversal
  , class Reference   = Value&
  , class Difference  = std::ptrdiff_t
>
class iterator_facade

Template argument Reference is the key. 模板参数Reference是关键。 You should just specify Reference when deriving from boost::iterator_facade . 您应该在从boost::iterator_facade派生时指定Reference For example, your code can look like as the following: 例如,您的代码可能如下所示:

template<typename value_type>
class custom_iterator
    :    public boost::iterator_facade<
             custom_iterator<value_type>,
             value_type,
             boost::forward_traversal_tag,
             value_type
         >
{
    ...
    value_type dereference() const{ return value_type(...); }
    ...
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM