我想调用具有以下签名的函数:
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;
}