【一人 C++20 Advent Calendar 2019】ジェネリックラムダのテンプレート構文【9日目】

一人 C++20 Advent Calendar 2019 9日目の記事になります。

ジェネリックラムダのテンプレート構文

C++20 ではジェネリックラムダ式でテンプレート構文を書けるようになりました。
書き方は以下の通り。

#include <iostream>
#include <vector>

int
main(){
    // std::vector のみ引数に受け取る
    auto show = []<typename T>(std::vector<T> const& v) {
        for(auto n : v) {
            std::cout << n << std::endl;
        }
    };
    show(std::vector { 1, 2, 3 });
    show(std::vector { "homu", "mami", "mado" });

    return 0;
}
/*
output:
1
2
3
homu
mami
mado
*/

std::vector のような特定のテンプレートクラスを受け取る場合に利用する事が出来ます。
ありそうでなかった便利そうな構文ですね。

サポートコンパイラ

  • GCC 8
  • Clang 9.0

参照