返回常量值的函数对象
Function object returning constant value
我想调用具有以下签名的函数:
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;
}
相关文章:
- 如何使用单独文件中的派生类访问友元函数对象
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 有没有办法将重载的类函数绑定到函数对象?
- 将指针传递到成员的指针,从模板参数包到函数对象
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- 隐式转换为比较函数对象(函子)用于 std::sort 而不是 std::map?
- C++使用函数对象的线程,如何调用多个析构函数而不是构造函数?
- 如何通过接口将函子分配给函数对象
- 对std::函数对象的调用不匹配,该对象是指向成员函数的指针
- 指向std::invoke中成员函数对象的指针
- 如何成功地将函数对象(或lambda)传递给trackbar回调的第二个参数(void*)
- "std::function"的简单版本:函数对象的生存期?
- C++ 将函数对象作为左值和/或右值传递
- SFINAE 用于具有默认参数的函数对象
- 构造函数对象赋值是否泄漏内存
- 如何发送通过绑定到函数/方法创建的函数对象?
- std::for_each 与函数对象
- 将函数对象传递给 std::function
- 访问执行策略for_each函数对象中的迭代器
- 通过C++函数对象类访问参数