【问题标题】:Function object in boost::fusion::for_each different from std::for_eachboost::fusion::for_each 中的函数对象与 std::for_each 不同
【发布时间】:2011-09-20 12:02:05
【问题描述】:

在升级到较新的编译器并解决编译器错误时,我意识到boost::fusion::for_each 要求传入的函数对象具有运算符const

来自Boost的示例:

struct increment
{
    template<typename T>
    void operator()(T& t) const
    {
        ++t;
    }
};
...
vector<int,int> vec(1,2);
for_each(vec, increment());

这当然没有改变。我没有意识到它与std::for_each 不同,后者不需要运算符为const

struct increment
{
    template<typename T>
    void operator()(T& t) // no const here!!!
    {
        ++t;
    }
};
std::vector<int> numbers;
std::for_each(numbers.begin(), numbers.end(), increment());

要求const 有什么明显的理由吗?我显然无法改变这一点,但我想了解为什么这两者不同。

感谢您的任何见解和解释!

【问题讨论】:

    标签: c++ foreach constants boost-fusion


    【解决方案1】:

    可能需要常量来防止函子的内部状态变化,因为 operator() 调用的顺序不是按顺序为每个元素定义的。因此,后续调用不应相互依赖。

    【讨论】:

    • 看起来像直觉,但它是有道理的 ;-)
    • 您有没有说明订单未定义的参考资料?
    • @murrekatt 不,我不知道。而且,documentation 没有提到任何严格的调用顺序。还有一个你可能感兴趣的mailing thread——主要思想是关于性能优化。
    • @abyss.7:感谢邮件线程。我相信 for_each 意味着它是一个严格的顺序,而不是相反。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多