如何为合成数据创建迭代器?
我正在使用 boost::iterator_facade<>
为合成数据创建迭代器。数据只能通过调用句柄上的函数来访问。该句柄被包装到MyHandle
中。我发现我需要将 MyHandle
用于 Value
和 Reference
模板参数。所以迭代器声明看起来像这样:
class MyIterator
: public boost::iterator_facade<
MyIterator
, MyHandle
, boost::forward_traversal_tag
, MyHandle
>
这是做这种事情的唯一方法吗?或者是否有更好的方法来为合成数据创建迭代器?另外,boost::forward_traversal_tag似乎没有很好地传达数据的人为性,代码是否应该使用不同的迭代器标签?
I am making iterators using boost::iterator_facade<>
for synthetic data. The data are only accessible by calling a function on a handle. The handle is wrapped into MyHandle
. I have figured out that I need to use MyHandle
for both Value
and Reference
template parameters. So the iterator declaration looks like this:
class MyIterator
: public boost::iterator_facade<
MyIterator
, MyHandle
, boost::forward_traversal_tag
, MyHandle
>
Is this the only way how to do this kind of thing? Or is there a better way how to create iterators for synthetic data? Also, the boost::forward_traversal_tag
seems like it does not convey the artificiality of the data well, should the code use a different iterator tag?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
boost::function_input_iterator
将生成器函数包装在迭代器中。取消引用迭代器会调用函数并返回其结果:http: //www.boost.org/doc/libs/1_47_0/libs/iterator/doc/function_input_iterator.html
boost::function_input_iterator
wraps a generator function in an iterator. Dereferencing the iterator calls the function and returns its result:http://www.boost.org/doc/libs/1_47_0/libs/iterator/doc/function_input_iterator.html