C 14 のジェネリック ラムダ
C 14 では、ジェネリック ラムダにより、引数の型として auto を持つラムダを定義でき、型ジェネリックの動作が可能になります。 。それらがどのように動作するかを理解すると、その基礎となるメカニズムが明らかになります。
テンプレート化された呼び出し演算子
ジェネリック ラムダは、非テンプレートの呼び出し演算子ではなく、テンプレート化された呼び出し演算子を使用してクロージャの型を定義します。 C 11 ラムダのように。これは、パラメータ リストに auto が含まれる場合、コンパイラは呼び出し演算子の関数テンプレートを作成することを意味します。
例:
auto glambda = [](auto a) { return a; };
上記のラムダは、次の型のインスタンス:
class /* unnamed */ { public: template<typename T> T operator () (T a) const { return a; } };
型消去とテンプレートポリモーフィズム
ジェネリック ラムダは、型消去を使用する Java のジェネリックに近いものです。異なる型の複数の関数を生成する C テンプレートとは異なり、汎用ラムダは型消去呼び出し演算子を使用して単一の関数を作成します。
型パラメータ リスト
汎用ラムダのcall 演算子テンプレートには、パラメーター宣言内の auto の出現ごとにテンプレート パラメーター リストが含まれます。各テンプレート パラメーターの型は、対応する変数の型に対応します。
結論:
C 14 のジェネリック ラムダは、次のようにラムダ式を定義することで型ジェネリック プログラミングを可能にします。テンプレート化された呼び出し演算子。これにより、Java のジェネリックスに似た型消去関数を作成する簡潔な方法が提供されます。
以上がC 14 のジェネリック ラムダはどのようにして型ジェネリックの動作を実現するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。