0

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

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

此函数迭代列表并通过执行修改每个元素new_value = action(old_value)。提供这样一个总是返回相同浮点值的动作函数的最短方法是什么。我自己从未尝试过,但我猜 C++11 lambda 会完成这项工作:

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

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

4

3 回答 3

2

您可以使用,

std::fill(floats.begin(), floats.end(), 3.14);
于 2013-09-18T08:46:29.853 回答
2

C++03 中最接近的替代方案是什么?是否有避免实际声明常规函数的技巧?

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

float DoThing1( float )
{
  return 3.13;
}

struct DoThing2
{
  float operator()(float)
  {
    return 3.13;
  }
};
于 2013-09-18T08:47:12.950 回答
0

查看 Boost.Phoenix,它将值实现为空函数
如果您愿意,您可能必须弄清楚如何将它与 Boost.Function 一起使用。

以下是 Phoenix 教程中此类空函数的示例:

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

int
main()
{
    print(val(3));
    print(val("Hello World"));
    return 0;
}
于 2013-09-18T14:35:48.830 回答