
236
|
6 章 ラムダ式
本項目では、C++11 のラムダにある制約を回避するために std::bind の使用法を解説しました
が、これはある意味皮肉です。項目 34 では std::bind よりもラムダを優先せよと主張するのです
から。しかし、項目 34 でも C++11 で std::bind が有用になる場面はいくつかあると述べており、
ここで述べたことがまさに該当します(C++14 では、初期化キャプチャや auto 仮引数などのおかげ
で、std::bind が有用になる場面は減る)。
重要ポイント
•
クロージャ内へオブジェクトをムーブするには C++14 の初期化キャプチャを使用する。
•
C++11 では手書きクラスや std::bind により初期化キャプチャをエミュレートする。
項目 33:auto&& 仮引数を std::forward する場合は decltype を
用いる
C++14 で最も興奮する機能の 1 つに汎用ラムダ(generic lambda、ジェネリックラムダ) 仮
引数指定に auto を記述できるラムダ があります。この機能の実装は直観的に分かりやすいも
のです。ラムダのクロージャクラスの operator() がテンプレートなのです。例えば次のようなラ
ムダがあるとします。
auto f = [](auto x){ return normalize(x); };
クロージャクラスの関数呼び出し演算子は次のようになります。
class SomeCompilerGeneratedClassName ...