N3648 Wording Changes for Generalized Lambda-capture
ラムダ式のキャプチャ時に、変数名を付けれるようにしよう、という提案。
int x = 3; auto f = [y = x + 1] { return y; } // x + 1にyという変数名を付けてラムダ式内で使用する assert(f() == 4);
これによって、キャプチャする変数1つに対して、複数のキャプチャ方法を適用できるようになります。たとえば、変数x
をコピーキャプチャした変数y
と、参照キャプチャした変数z
をラムダ式内で同時に使用できます。
int x = 3; // yはxをコピーキャプチャした変数、zはxを参照キャプチャした変数 auto f = [y = x, &z = x] { ... };
これは元々、boost::bind()
ではできていたことなので、ラムダ式でもできるようになると、たしかにうれしいです。
それとこれは、ムーブキャプチャの代替として使えます。
promise<int> p; future<int> f = p.get_future(); thread t([p = std::move(p)] { p.set_value(3); }); int result = f.get(); t.join();
この機能は、GCC 4.9に含まれる予定です。
GCC 4.9 Release Series - Changes, New Features, and Fixes