Maison >développement back-end >C++ >Comment fonctionnent les Lambdas génériques en C 14 ?

Comment fonctionnent les Lambdas génériques en C 14 ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-06 00:53:11141parcourir

How Do Generic Lambdas in C  14 Work?

Comprendre les Lambdas génériques en C 14

Introduits en C 14, les lambdas génériques fournissent un moyen d'écrire des expressions lambda qui opèrent sur les valeurs de n'importe quel taper. Cependant, la question se pose : comment fonctionne ce mécanisme ?

Implémentation des Lambdas génériques

Contrairement aux lambdas classiques en C 11, les lambdas génériques emploient un opérateur d'appel basé sur un modèle dans leur type de fermeture. Lorsque le mot-clé [auto](https://en.cppreference.com/w/cpp/keyword/auto) apparaît dans la liste des paramètres, le compilateur génère un opérateur d'appel basé sur un modèle plutôt qu'un opérateur standard.

Exemple :

auto glambda = [](auto a) { return a; };

Ce code génère un type de fermeture avec l'appel suivant opérateur :

class /* unnamed */
{
public:
    template<typename T>
    T operator () (T a) const { return a; }
};

Définition standard

Selon le paragraphe 5.1.2/5 du projet de norme C 14 n3690, l'opérateur d'appel d'un type de fermeture lambda générique a les propriétés suivantes :

  • Chaque occurrence de [auto](https://en.cppreference.com/w/cpp/keyword/auto) dans la liste des paramètres correspond à un paramètre de modèle de type inventé.
  • Le type de retour et les paramètres de fonction de l'opérateur d'appel sont dérivés à partir du type de retour final et de la clause de déclaration de paramètre du lambda en remplaçant chaque [auto](https://en.cppreference.com/w/cpp/keyword/auto) par le paramètre de modèle inventé nom.

Similitude avec les modèles C et Java Generics

Les lambdas génériques sont similaires aux modèles C dans la mesure où le compilateur génère des fonctions uniques avec différents types d'arguments basés sur sur le paramètre de modèle. Cependant, ils diffèrent des génériques Java, qui utilisent l'effacement de type au moment de l'exécution pour conserver les informations de type au moment de la compilation. Les lambdas génériques, en revanche, créent des fermetures statiquement spécialisées avec des types explicites.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn