ホームページ > バックエンド開発 > C++ > C 14 のジェネリック ラムダは、`auto` キーワードを使用して型の柔軟性をどのように実現しますか?

C 14 のジェネリック ラムダは、`auto` キーワードを使用して型の柔軟性をどのように実現しますか?

Patricia Arquette
リリース: 2024-12-16 16:36:17
オリジナル
823 人が閲覧しました

How Do C  14 Generic Lambdas Achieve Type Flexibility Using the `auto` Keyword?

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

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