为什么我们在C ++中使用std :: function而不是原始的C函数指针?

时间:2012-07-05 21:38:07

标签: c++ c++11 function-pointers

std::function<T1(T2)>优于原始T1 (*)(T2)的优势是什么?

3 个答案:

答案 0 :(得分:33)

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);
}

Live example on Ideone.

如示例所示,您也不需要完全相同的签名,只要它们兼容(即,std::function的参数类型可以传递给包含的函数/函子)。

答案 1 :(得分:15)

std::function可以保存函数对象(包括lambdas),以及具有正确签名的函数指针。所以它更通用。

答案 2 :(得分:6)

除了更清晰的外观和更具描述性的语法外,std::function还可以存储任何可调用的对象:

  • 功能
  • lambda expressions
  • 绑定表达式
  • 函子

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