我想调用具有以下签名的函数:
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
?有没有办法避免实际声明常规函数?
答案 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;
}