最終更新:2026-10-12
C++20 Lambda 式(前編)¶
C++20 における lambda テンプレート¶
C++14 は汎用ラムダ式をサポートしており、ラムダは任意の型の引数を受け取れます。例えば:
これは次のように展開されます:
struct Func {
template <typename T1, typename T2>
auto operator()(T1 a, T2 b) const {
return a + b;
}
};
しかし、次のような展開形は実現できません:
1つ目:同じ型
2つ目:std::array だけ
3つ目:推論なし
C++14 のラムダは優れていますが、C++20 はこれらのケースを簡単に実現できるようにします。C++20 ではラムダ式の定義内でテンプレート型パラメータを使えます。基本構文は以下の通りです:
以下、いくつかの例でその利点を説明します。
1.型の制限¶
次のような例で、C++14 では以下のコードを書けますが、使用時に渡されるものが vector とは限らず、期待される動作と不一致になり、エラーが発生する可能性があります。
C++20 以降、その型を制限できます:
さて問題です。面接問題を出しましょう:C++14 で vector に制限するには、どうすれば安全を保証できるか知っていますか?
2.完全転送¶
C++20 では完全転送を非常に簡単に使えます。例えば:
さて問題です。C++14 と比べてどんな利点がありますか?あるいは、C++14 で完全転送を実現するには何が必要でしょうか?
本節終わり
関連トピック¶
- C++20 コルーチン入門 | C++那些事
- C++20 channel 実践 | C++那些事
- C++20 Concepts コンセプト | C++那些事
- C++20 constexpr とカンマ式 | C++那些事
- C++20 バイトオーダー endian | C++那些事
- C++20 モジュール Modules | C++那些事
- C++20 Ranges ライブラリ | C++那些事
- C++20 std::span の設計と落とし穴 | C++那些事
- C++20 新機能ガイド | C++那些事
- C++20 [[likely]] と [[unlikely]] | C++那些事