为什么我们在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式
  • 函子

更不用说存储,复制和绑定对象到成员函数更容易和更直观。