首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost迭代器外观和dereference()函数

boost迭代器外观和dereference()函数
EN

Stack Overflow用户
提问于 2012-04-27 22:15:43
回答 1查看 1.8K关注 0票数 9

我正在尝试创建一个迭代器,它只能解引用实值类型,而不能引用引用。这是否可以使用boost::iterator_facade,或者它是否要求我有可以通过adress\reference返回的值。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-26 20:06:00

是的,你想要的东西是可能的。请看一下boost/iterator_facade.hpp (例如1.49.0版本的Boost lib,但它也适用于它的新发行版):

代码语言:javascript
复制
  template <
    class Derived
  , class Value
  , class CategoryOrTraversal
  , class Reference   = Value&
  , class Difference  = std::ptrdiff_t
>
class iterator_facade

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

代码语言:javascript
复制
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(...); }
    ...
};
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10352308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档