[英]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.