関数パラメータとしてのラムダ

auto
やテンプレートを使用せずにラムダ変数や関数パラメータを宣言する表記法は何ですか?そうする方法はありますか?あるいは、コンパイラはコンパイル時にプログラマが知らない名前のラムダごとに一意のクラスオブジェクトを定義していますか?もしそうなら、なぜですか?関数ポインタのように渡すことはできませんか?もしそれが不可能なら、大きな失望となるだろう。

ベストアンサー

ラムダは状態を保持することができます(周囲のコンテキストからキャプチャされた参照など)。そうでなければ、関数ポインタに格納することができます。そうであれば、関数オブジェクトとして格納する必要があります(関数ポインタに状態を保持する場所がないため)。

// No state, can be a function pointer:
int (*func_pointer) (int) = [](int a) { return a; };

// One with state:
int b = 3;
std::function func_obj = [&](int a) { return a*b; };

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です