我正在尝试创建一个迭代器,它只能解引用实值类型,而不能引用引用。这是否可以使用boost::iterator_facade,或者它是否要求我有可以通过adress\reference返回的值。
更具体地说,我的迭代器返回一个引用的std::pair,这意味着我的迭代器value_type不会存储在任何地方,而是在取消引用时动态创建的(如std::map::iterator)。
发布于 2012-12-26 20:06:00
是的,你想要的东西是可能的。请看一下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是关键。在从boost::iterator_facade派生时,您应该只指定Reference。例如,您的代码可能如下所示:
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(...); }
...
};https://stackoverflow.com/questions/10352308
复制相似问题