我使用boost::iterator_facade<>
为合成数据制作迭代器。只能通过调用句柄上的函数来访问数据。句柄被包裹在MyHandle
中。我已经发现我需要对MyHandle
和Value
模板参数使用Reference
。因此迭代器声明如下所示:
class MyIterator
: public boost::iterator_facade<
MyIterator
, MyHandle
, boost::forward_traversal_tag
, MyHandle
>
这是如何做到这一点的唯一方法吗?或者有更好的方法如何为合成数据创建迭代器?另外,如果代码使用不同的迭代器标记,boost::forward_traversal_tag
似乎不能很好地传达数据的人为性?
答案 0 :(得分:2)
boost::function_input_iterator
在迭代器中包装生成器函数。取消引用迭代器会调用该函数并返回其结果:
http://www.boost.org/doc/libs/1_47_0/libs/iterator/doc/function_input_iterator.html