返回常量值的函数对象



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

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; });

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

您可以使用,

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

C++03 中最接近的选择是什么?有没有避免实际声明常规函数的技巧?

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

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

看看 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;
}

最新更新