ホームページ > バックエンド開発 > C++ > C 14 のジェネリック ラムダはどのようにして型ジェネリックの動作を実現するのでしょうか?

C 14 のジェネリック ラムダはどのようにして型ジェネリックの動作を実現するのでしょうか?

DDD
リリース: 2024-12-10 04:59:08
オリジナル
1035 人が閲覧しました

How Do C  14 Generic Lambdas Achieve Type-Generic Behavior?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート