Lambdas génériques et fermetures en C++14
Écrire des lambdas génériques avec des paramètres auto et raisonner sur les types de fermeture
Lambdas génériques et fermetures en C++14 est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Lambdas génériques
C++14 vous permet d’écrire auto dans la liste de paramètres d’une lambda. Le compilateur génère un operator() basé sur un modèle — la lambda accepte n’importe quel type.
auto print = [](const auto& x) {
std::cout << x << "\n";
};
print(42);
print("hello");
print(3.14);Fonctionnement
La lambda devient une classe dotée d’un operator() basé sur un modèle. Chaque combinaison unique de types instancie en interne une fonction distincte.
Cas d’utilisation
Les lambdas génériques sont particulièrement utiles dans les algorithmes qui fonctionnent avec plusieurs types.
std::vector<int> ints = {1, 2, 3};
std::vector<std::string> strs = {"a", "b"};
auto printAll = [](const auto& container) {
for (const auto& x : container) std::cout << x << " ";
};
printAll(ints);
printAll(strs);Plusieurs paramètres auto
Chaque auto est indépendant — différents paramètres peuvent être résolus en différents types.
auto add = [](auto a, auto b) {
return a + b;
};
std::cout << add(1, 2.5); // 3.5
std::cout << add(std::string("Hi"), "!"); // Hi!Les fermetures sont des objets
Chaque expression lambda crée une fermeture — une instance d’une classe unique générée par le compilateur. La fermeture stocke comme membres toutes les variables capturées.
Un type unique pour chaque lambda
Chaque expression lambda possède un type unique, même si deux expressions ont un texte identique. Vous ne pouvez pas écrire directement le nom du type — utilisez auto ou std::function.
Stocker des lambdas dans std::function
Pour conserver une lambda dans une variable dont le type est connu, encapsulez-la dans std::function. Cela ajoute un léger surcoût, mais permet le polymorphisme à l’exécution des éléments appelables.
#include <functional>
std::function<int(int)> doubler = [](int x) { return x * 2; };Coût de l’effacement de type
std::function utilise l’effacement de type — il peut stocker n’importe quel élément appelable compatible, mais ajoute une allocation sur le tas et un appel virtuel. Évitez-le dans les boucles critiques.
Quand auto suffit
Pour les lambdas à durée de vie courte (passées à des algorithmes ou stockées dans auto), aucun effacement de type n’est nécessaire et il n’y a aucun surcoût.
Renvoyer des lambdas
Utilisez auto comme type de retour pour renvoyer une lambda. Chaque appel crée une nouvelle fermeture.
auto makeAdder(int n) {
return [n](int x) { return x + n; };
}
auto add5 = makeAdder(5);
std::cout << add5(10); // 15Fonctions d’ordre supérieur
Les lambdas font de C++ un langage agréable pour les fonctions d’ordre supérieur — des fonctions qui prennent d’autres fonctions en paramètres ou qui en renvoient.
Vérification rapide
Que signifie auto dans la liste de paramètres d’une lambda C++14 ?
Récapitulatif
Les lambdas génériques de C++14 utilisent des paramètres auto pour le polymorphisme à la compilation. Chaque lambda est un type de fermeture unique — utilisez auto pour les stocker, ou std::function lorsque l’effacement de type est nécessaire.
Questions Fréquemment Posées
La leçon « Lambdas génériques et fermetures en C++14 » est-elle gratuite ?
Oui — le texte complet de « Lambdas génériques et fermetures en C++14 » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Lambdas génériques et fermetures en C++14 » ?
Écrire des lambdas génériques avec des paramètres auto et raisonner sur les types de fermeture Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Lambdas génériques et fermetures en C++14 » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Objets fonction et foncteurs
- Captures de lambda par valeur, par référence et mutable
- Lambdas génériques et fermetures en C++14
- std::function : objets appelables à types effacés