【问题标题】:how to create iterators for synthetic data?如何为合成数据创建迭代器?
【发布时间】:2011-12-12 09:40:48
【问题描述】:

我正在使用boost::iterator_facade<> 为合成数据制作迭代器。数据只能通过在句柄上调用函数来访问。句柄被包裹在MyHandle 中。我发现我需要将MyHandle 用于ValueReference 模板参数。所以迭代器声明如下所示:

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

这是做这种事情的唯一方法吗?或者有没有更好的方法来为合成数据创建迭代器?另外,boost::forward_traversal_tag 似乎没有很好地传达数据的人工性,代码应该使用不同的迭代器标签吗?

【问题讨论】:

    标签: c++ boost iterator


    【解决方案1】:

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

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

    【讨论】:

    • 好吧,数据是结构化的,所以一个简单的函数是不行的。
    • 当您说“简单函数”时,您的意思是“在调用之间保持不变的没有状态的函数”吗?这不是障碍,因为您可以使用任何可调用对象构造 function_input_iterator,包括定义函数调用运算符的有状态结构。
    猜你喜欢
    • 2018-12-24
    • 1970-01-01
    • 2019-06-06
    • 2020-08-05
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 2014-10-09
    • 2016-04-29
    相关资源
    最近更新 更多