函数对象返回常量值

时间:2013-09-18 08:39:52

标签: c++ lambda anonymous-function

我想调用具有以下签名的函数:

void foreach(std::list<float>& floats, boost::function<float(float)> action);

此函数迭代列表并通过执行new_value = action(old_value)修改每个元素。提供此类动作函数的最短方法是什么,它始终返回相同的浮点值。我从来没有尝试过自己,但我猜C ++ 11 lambdas会做这项工作:

foreach(floats, [](float){ return 3.14; });

C ++ 03中最接近的替代方法是什么,假设我必须调用我的函数而不能使用std::fill?有没有办法避免实际声明常规函数?

3 个答案:

答案 0 :(得分:2)

你可以使用,

std::fill(floats.begin(), floats.end(), 3.14);

答案 1 :(得分:2)

  

C ++ 03中最接近的替代品是什么?有没有办法避免实际声明常规函数?

c ++ 03中最接近的技巧是声明一个函数或一个仿函数类:

float DoThing1( float )
{
  return 3.13;
}

struct DoThing2
{
  float operator()(float)
  {
    return 3.13;
  }
};

答案 2 :(得分:0)

查看Boost.Phoenix,它实现了values as nullary functions 如果你愿意的话,你可能必须弄清楚如何将它与Boost.Function一起使用。

以下是Phoenix教程中这样一个Nullary函数的例子:

template <typename F>
void print(F f)
{
    cout << f() << endl;
}

int
main()
{
    print(val(3));
    print(val("Hello World"));
    return 0;
}