C++1y - 多相ラムダの提案
2012/09で公開されたpaperあたりから、C++1yに向けての大きめな提案が提出され始めました。今回は多相ラムダを見ていきます。
実装コストが高いという理由でC++11では見送られ、あまり議論もされなかった多相ラムダ(polymorphic lambda)ですが、C++1yでは正式に提案されています。現在考えられている構文はこんな感じです:
[](const& x, & y) { return x + y; }
つまり、本来型を記述するところをautoやその他特別なキーワードを用いずに単に書かない、というものです。
このラムダは、以下のような関数オブジェクトを生成します。
struct anonymous { template <typename T, typename U> auto operator()(T const& x, U& y) const -> decltype(x+y) { return x + y; } };
関数呼び出し演算子がテンプレートになっているのが特徴です。
また、optionalにテンプレートも書けるようにしたいようです。
[]<int N, class T>(Stack<std::vector, T, N>& a, b) {}
このラムダをauto以外の方法で変数に持つことについては、まだ提案されていないようです。
参照:
N3418 Proposal for Generic (Polymorphic) Lambda Expressions