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

Vik*_*ehr 9 boost boost-iterators iterator-facade

我正在尝试创建一个迭代器,它只能取消引用实际值类型,而不是引用.是否可以使用boost::iterator_facade,或者它是否要求我具有可由adress\reference返回的值.

为了更具说明性,我的迭代器返回一个std::pair引用,这意味着我的迭代器value_type不会存储在任何地方,而是在解除引用时动态创建(如std::map::iterator).

Pio*_*nov 14

是的,你想要的东西是可能的.请看一下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
Run Code Online (Sandbox Code Playgroud)

模板参数Reference是关键.您应该只指定Reference派生时间boost::iterator_facade.例如,您的代码可能如下所示:

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(...); }
    ...
};
Run Code Online (Sandbox Code Playgroud)