1. ホーム
  2. c++

[解決済み] C++14にはgeneric lambdaがあるのに、C++20で導入されたtemplate lambdaの必要性は何でしょうか?

2022-11-14 05:59:51

質問

c++14 は、一般的なラムダを導入し、以下のように書くことができるようになりました。

auto func = [](auto a, auto b){
    return a + b;
};
auto Foo = func(2, 5);
auto Bar = func("hello", "world");

この汎用ラムダが func はテンプレート化された関数と同じように動作します func が動作します。

C++委員会はなぜgeneric lamdaのテンプレート構文を追加することにしたのでしょうか?

どのように解決するのですか?

C++14 generic lambdas は、ファンクタを生成するために、非常にクールな方法で operator () というようなものです。

template <class T, class U>
auto operator()(T t, U u) const;

でも、こうはいかない。

template <class T>
auto operator()(T t1, T t2) const; // Same type please

こんな感じでも。

template <class T, std::size_t N>
auto operator()(std::array<T, N> const &) const; // Only `std::array` please

こんな感じです(実際に使うにはちょっと面倒になりますが)。

template <class T>
auto operator()() const; // No deduction

C++14のラムダでも良いのですが、C++20ではこのようなケースでも手間なく実装できます。