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

发布于 2024-12-11 13:12:35 字数 509 浏览 0 评论 0原文

我正在使用 boost::iterator_facade<> 为合成数据创建迭代器。数据只能通过调用句柄上的函数来访问。该句柄被包装到MyHandle中。我发现我需要将 MyHandle 用于 ValueReference 模板参数。所以迭代器声明看起来像这样:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

拥抱影子 2024-12-18 13:12:35

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文