C 14 のジェネリック ラムダ: 詳しい説明
C 14 のジェネリック ラムダの出現により、ラムダ式に新しい機能が導入されました。自動的に推定される引数の型を持つ関数の場合。ただし、これらのジェネリックの動作メカニズムは推測の対象となっています。
当初の想定に反して、ジェネリック ラムダは実装に C テンプレートに依存しません。代わりに、ラムダのクロージャ型に対してテンプレート化された呼び出し演算子を使用する独自のアプローチに従います。
たとえば、汎用ラムダ式
auto glambda = [](auto a) { return a; };
は、次のようなクロージャ型を生成します。テンプレート化された呼び出し演算子:
class /* unnamed */ { public: template <typename T> T operator () (T a) const { return a; } };
呼び出し演算子は、auto in の各インスタンスの作成された型テンプレート パラメーターに基づいてテンプレート化されます。ラムダのパラメータ宣言。これらのパラメーターを使用すると、ラムダの呼び出しごとに推定された型を変更できます。
このテンプレート化されたアプローチは、一意の引数の型ごとに新しい関数を生成する C テンプレートとは異なります。代わりに、これは Java のジェネリックスに似た動作をし、基礎となる型消去により、特殊な関数の生成を必要とせずに効率的な実装が可能になります。
要約すると、C 14 のジェネリック ラムダは、従来の C テンプレートではなく、テンプレート化された呼び出し演算子を利用します。この設計選択により、表現力と最適化のバランスが取れ、自動的に推定された引数の型を持つ関数を操作する便利な手段が提供されます。
以上が従来のテンプレートを使用せずに、C 14 のジェネリック ラムダで型推定をどのように達成するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。