前回までのラムダ式の解説はこちら(N2413, N2487)
【N2487 〜 N2529 までのラムダ式】
int min; int max; vector<int> v; find_if(v.begin(), v.end(), <&>(int x)(x > min && x < max));
【最新(N2550)のラムダ式】
int min; int max; vector<int> v; find_if(v.begin(), v.end(), [&](int x){ return x > min && x < max; });
環境のキャプチャ(変数ごとの参照方法指定)
【N2487 〜 N2529 までのラムダ式】
int min; int max; vector<int> v; find_if(v.begin(), v.end(), <&>(int x) : [max] (x > min && x < max));
<デフォルトのキャプチャ方法(& or = or 空)> (パラメータ) : [キャプチャリスト...] ( 式 )
【最新(N2550)のラムダ式】
int min; int max; vector<int> v; find_if(v.begin(), v.end(), [&, max](int x) { return x > min && x < max; });
[デフォルトのキャプチャ方法(& or =), キャプチャリスト...] (パラメータ) { 式 }
デフォルトのキャプチャ方法は「&が参照」で「=がコピー」
キャプチャリストの指定方法は上記の例で説明すると「max(コピー)」「&max(参照)」「this」
戻り値の型指定
find_if(v.begin(), v.end(), [&](int x)->bool { return x > min && x < max; });
例外指定(exception-specification)もできる
find_if(v.begin(), v.end(), [&](int x) throw ->bool { return x > min && x < max; });
フルで書くとこうかな
[デフォルトのキャプチャ方法(& or =), キャプチャリスト...(id or &id or this)]
(パラメータ) 例外指定 ->戻り値の型 { 式(ラムダ式も可) }
個人的には[ ] より < > のほうがよかった(<>のほうがカッコイイから)
それと、まだくわしく調べてないけど
以前まであったnested_function
修正
・return文を書き加えました(2008/03/26)
N2550 Lambda Expressions and Closures: Wording for Monomorphic Lambdas (Revision 4)