如何为合成数据创建迭代器?

时间:2011-10-21 08:17:20

标签: c++ boost iterator

我使用boost::iterator_facade<>为合成数据制作迭代器。只能通过调用句柄上的函数来访问数据。句柄被包裹在MyHandle中。我已经发现我需要对MyHandleValue模板参数使用Reference。因此迭代器声明如下所示:

class MyIterator
    : public boost::iterator_facade<
        MyIterator
        , MyHandle
        , boost::forward_traversal_tag
        , MyHandle
    >

这是如何做到这一点的唯一方法吗?或者有更好的方法如何为合成数据创建迭代器?另外,如果代码使用不同的迭代器标记,boost::forward_traversal_tag似乎不能很好地传达数据的人为性?

1 个答案:

答案 0 :(得分:2)

boost::function_input_iterator在迭代器中包装生成器函数。取消引用迭代器会调用该函数并返回其结果:

http://www.boost.org/doc/libs/1_47_0/libs/iterator/doc/function_input_iterator.html