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 :
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!