C 14 の Auto キーワードのバリアントにおけるジェネリック ラムダを理解する
C 14 のジェネリック ラムダは、auto キーワードを含むラムダ式の一種です。引数の型を使用すると、柔軟性が向上します。非テンプレート呼び出し演算子を含む C 11 ラムダとは対照的に、汎用ラムダは、定義するクロージャ型内にテンプレート化された呼び出し演算子を持ちます。
たとえば、次のコードは汎用ラムダを示しています。
auto glambda = [](auto a) { return a; };
この場合、glambda のクロージャーの型が定義されますas:
class /* unnamed */ { public: template<typename T> T operator () (T a) const { return a; } };
これは、glambda が、テンプレート化された呼び出し演算子を持つ一意の名前のないファンクターのインスタンスであることを意味します。ラムダのパラメーター宣言内の auto の各出現は、発明された型テンプレート パラメーターに対応し、呼び出し演算子がさまざまな型の引数を処理できるようにします。
C 14 標準 (n3690) では、呼び出し演算子がクロージャ型の一般的なラムダの場合、ラムダのパラメータ宣言節内の自動ごとに 1 つの発明型テンプレート パラメータを含むテンプレート パラメータ リストがあります。戻り値の型と関数のパラメーターは、ラムダのtrailing-return-typeとparameter-declaration-clauseから派生し、対応する作成されたtemplate-parameterの名前に自動的に置き換えられます。
要約すると、C 14の汎用ラムダです。テンプレート化された呼び出し演算子を使用して、一意の名前のないファンクターを表します。これは、コンパイラが引数の型ごとに型を置き換えた新しい関数を生成する C テンプレート ベースのポリモーフィズムとは異なります。これは、コンパイル中の型の消去を伴う Java のジェネリックスとより緊密に連携しています。
以上がC 14 のジェネリック ラムダは、`auto` キーワードを使用して型の柔軟性をどのように実現しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。