我正在尝试创建一个迭代器,它只能取消引用实值类型,而不能引用。
这可能是使用boost::iterator_facade
,还是要求我拥有可以通过地址\参考返回的值。
为了更具说明性,我的迭代器返回std::pair
个引用,这意味着我的迭代器value_type
不会存储在任何地方,而是在解除引用时动态创建(如std::map::iterator
)。
答案 0 :(得分: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
模板参数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(...); }
...
};