Objets fonction et foncteurs
Écrire des classes avec operator() pour créer des objets appelables dotés d’un état
Objets fonction et foncteurs est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 1 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.
Qu’est-ce qu’un objet fonctionnel
Un objet fonctionnel est une classe qui surcharge operator(). Ses instances peuvent être appelées comme des fonctions.
struct Square {
int operator()(int x) const { return x * x; }
};
Square sq;
std::cout << sq(5); // 25Pourquoi ne pas utiliser simplement une fonction
Les objets fonctionnels transportent un état. Une fonction ordinaire n’en transporte pas. L’état permet la configuration, le comptage et les fonctions de rappel avec état.
struct Counter {
int count = 0;
int operator()(int x) { ++count; return x; }
};
Counter c;
c(10); c(20); c(30);
std::cout << c.count; // 3Comportement configurable
Stockez la configuration dans les membres de l’objet fonctionnel. Le même type d’objet fonctionnel fonctionne avec de nombreux ensembles de paramètres.
struct GreaterThan {
int threshold;
bool operator()(int x) const { return x > threshold; }
};
GreaterThan over10{10};
over10(15); // true
over10(5); // falseUtiliser des objets fonctionnels avec les algorithmes de STL
Les algorithmes de STL acceptent tout ce qui est appelable — objets fonctionnels, lambdas et pointeurs de fonction.
std::vector<int> v = {1, 11, 5, 99, 8};
auto it = std::find_if(v.begin(), v.end(), GreaterThan{10});
std::cout << *it; // 11Objets fonctionnels prédéfinis dans <functional>
La bibliothèque standard fournit des objets fonctionnels prêts à l’emploi : std::plus, std::less, std::equal_to, std::negate, et bien d’autres.
#include <functional>
std::vector<int> v = {3, 1, 4, 1, 5};
std::sort(v.begin(), v.end(), std::greater<int>{});
// sorted descendingObjet fonctionnel ou pointeur de fonction
Les objets fonctionnels sont généralement mieux pris en ligne, car leur operator() est un appel direct. Les pointeurs de fonction peuvent être plus flexibles, mais ils impliquent un appel indirect.
Objets fonctionnels comme paramètres de modèle
De nombreux conteneurs et algorithmes de STL acceptent un objet fonctionnel comme paramètre de modèle — comparateurs d’ensembles, fonctions de hachage et allocateurs.
std::set<int, std::greater<int>> s = {1, 2, 3};
// s iterates in descending order: 3, 2, 1Les lambdas sont des objets fonctionnels
Le compilateur génère une classe unique dotée de operator() pour chaque lambda. Les lambdas sont du sucre syntaxique pour les objets fonctionnels.
Quand écrire un objet fonctionnel
Utilisez un objet fonctionnel écrit manuellement lorsque :
- La même logique est utilisée à de nombreux endroits (donnez-lui un nom)
- Elle fait partie de votre interface publique
- Elle doit être constructible par copie ou par déplacement avec un comportement précis
Quand utiliser plutôt une lambda
Pour une utilisation ponctuelle, une lambda est plus courte et plus claire. Pour un comportement réutilisable, un objet fonctionnel nommé améliore la lisibilité.
Composabilité
Combinez des objets fonctionnels avec std::bind ou, de manière plus moderne, en composant des lambdas. Les bibliothèques fonctionnelles comme Boost fournissent également des combinateurs.
Vérification rapide
Quelle est la capacité principale d’un objet fonctionnel par rapport à une fonction ordinaire ?
Récapitulatif
Un objet fonctionnel est une classe dotée de operator(). Il transporte un état, s’intègre aux algorithmes de STL et sert de fondation aux lambdas. Utilisez des objets fonctionnels nommés pour les comportements réutilisables et des lambdas pour la logique exécutée une seule fois.
Questions Fréquemment Posées
La leçon « Objets fonction et foncteurs » est-elle gratuite ?
Oui — le texte complet de « Objets fonction et foncteurs » 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 « Objets fonction et foncteurs » ?
Écrire des classes avec operator() pour créer des objets appelables dotés d’un état 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 1 sur 4.
Combien de temps prend la leçon « Objets fonction et foncteurs » ?
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