C++14: Generic lambdas

C++11 で実装されたラムダ式の引数に auto が使用できるようになりました( いわゆる多相ラムダと呼ばれる機能。
これは template 引数と同様に引数型を抽象化することができる機能です。

// auto を使用することでどんな型でも受け取る事ができるラムダ式を定義できる
auto plus = [](auto a, auto b){
    return a + b;
};

plus(1, 2);
// => 3
plus(3.14, 3.41);
// => 6.55

// 別々の型をわたしても問題ない
plus(std::string("homu"), "mami");
// => 6.55



上記の plug

template<typename T, typename U>
auto
plus(T a, U b){
    return a + b;
}

という風な関数テンプレートと同等の挙動になります。

実装コンパイラ

  • Clang 3.4
  • GCC 4.9