44

std::function<T1(T2)>比原版有什么优势T1 (*)(T2)

4

3 回答 3

35

std::function可以容纳多个函数指针,即functors

#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可以将参数类型传递给包含的函数/仿函数)。

于 2012-07-05T21:42:29.213 回答
16

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

于 2012-07-05T21:40:47.010 回答
9

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

  • 职能
  • lambda 表达式
  • 绑定表达式
  • 函子

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

于 2014-01-14T18:04:37.090 回答