为什么我们在C ++中使用std :: function而不是原来的C函数指针呢?
在原始T1 (*)(T2)
, std::function<T1(T2)>
的优点是什么?
std::function
可以容纳多个函数指针,即函子 。
#include <functional> void foo(double){} struct foo_functor{ void operator()(float) const{} }; int main(){ std::function<void(int)> f1(foo), f2((foo_functor())); f1(5); f2(6); }
在Ideone上的生动的例子。
如示例所示,只要它们是兼容的 (即, std::function
的参数types可以传递到包含的函数/函子),也不需要完全相同的签名。
std::function
可以保存函数对象(包括lambdas),以及具有正确签名的函数指针。 所以它更通用。
除了更干净的外观和更具描述性的语法, std::function
可以存储任何可调用的对象:
- function
- lambdaexpression式
- 绑定expression式
- 函子
更不用说存储,复制和绑定对象到成员函数更容易和更直观。