0Pricing
C++ Academy · Leçon

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);   // 15

Fonctions 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

  1. Objets fonction et foncteurs
  2. Captures de lambda par valeur, par référence et mutable
  3. Lambdas génériques et fermetures en C++14
  4. std::function : objets appelables à types effacés
← Retour à C++ Academy