boost :: fusion :: for_each中的函数对象与std :: for_each不同

时间:2011-09-20 12:02:05

标签: c++ foreach const boost-fusion

在升级到更新的编译器并解决编译器错误时,我意识到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?我显然无法改变这一点,但我想了解为什么这两者有所不同。

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

1 个答案:

答案 0 :(得分:1)

可能需要使用Constness来防止仿函数的内部状态更改,因为,没有为每个元素按顺序定义operator()调用的顺序。因此,随之而来的呼叫不应该相互依赖。