44

std::function<T1(T2)>オリジナルに対する利点は何T1 (*)(T2)ですか?

4

3 に答える 3

35

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含まれる関数/ファンクターにパラメーターの型を渡すことができます)。

于 2012-07-05T21:42:29.213 に答える
16

std::function関数オブジェクト (ラムダを含む) と、正しいシグネチャを持つ関数ポインターを保持できます。そのため、より汎用性があります。

于 2012-07-05T21:40:47.010 に答える
9

すっきりとした外観とよりわかりやすい構文とは別に、任意の呼び出し可能なオブジェクトstd::functionを格納できます。

  • 機能
  • ラムダ式
  • バインド式
  • 関手

メンバー関数へのオブジェクトの格納、コピー、およびバインドは、はるかに簡単で直感的であることは言うまでもありません。

于 2014-01-14T18:04:37.090 に答える