Modèles variadiques et paquets de paramètres
Utiliser des paquets de paramètres et des expressions de repli pour écrire des modèles variadiques
Modèles variadiques et paquets de paramètres 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.
Nombre variable d’arguments de modèle
Les modèles variadiques acceptent un nombre quelconque d’arguments de modèle. Ils servent notamment à écrire des fonctions comme std::make_unique, std::tuple et des fonctions de journalisation de style printf.
Syntaxe des paquets de paramètres
Utilisez typename... Ts pour déclarer un paquet de paramètres de type et Ts... pour le développer.
template <typename... Args>
void print_all(Args... args) {
// ...
}Développement d’un paquet
Les ... placés après une expression développent le paquet en une liste séparée par des virgules.
template <typename... Args>
void pass_through(Args... args) {
other_func(args...); // pass each arg
}Modèles variadiques récursifs (ancien style)
Avant C++17, les fonctions variadiques étaient généralement écrites de manière récursive : traiter un argument, puis recommencer avec le reste.
// base case
void log() {}
// recursive case
template <typename T, typename... Rest>
void log(T first, Rest... rest) {
std::cout << first;
log(rest...);
}Expressions de pliage (C++17)
C++17 a ajouté les expressions de pliage, bien plus claires que la récursion. Appliquez un opérateur à tout un paquet.
template <typename... Args>
auto sum(Args... args) {
return (args + ...); // fold +
}
std::cout << sum(1, 2, 3, 4); // 10Opérateurs de pliage
Quatre formes de pliage :
(... op pack)— pliage à gauche sur un développement unaire(pack op ...)— pliage à droite(init op ... op pack)— pliage à gauche avec une valeur initiale(pack op ... op init)— pliage à droite avec une valeur initiale
Afficher tous les arguments
Une tournure courante avec un pliage sur l’opérateur virgule.
template <typename... Args>
void print_all(Args... args) {
((std::cout << args << " "), ...); // comma fold
}
print_all(1, "hi", 3.14); // 1 hi 3.14Compter les arguments
sizeof...(pack) renvoie le nombre d’éléments d’un paquet au moment de la compilation.
template <typename... Args>
void info(Args... args) {
std::cout << "count = " << sizeof...(args);
}Modèles de classes variadiques
Les modèles de classes peuvent également comporter des paquets de paramètres. Exemple : std::tuple<Ts...>.
template <typename... Ts>
class Tuple {
// implementation uses recursion or storage tricks
};Transmission parfaite avec des paquets
Combinez les modèles variadiques avec std::forward pour transmettre parfaitement des arguments quelconques à un constructeur.
template <typename T, typename... Args>
std::unique_ptr<T> my_make_unique(Args&&... args) {
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}Manipulation de paquets de types
Avec la spécialisation de modèle ou les expressions de pliage, vous pouvez implémenter des opérations sur des listes au moment de la compilation : premier élément, dernier élément, décomposition tête/queue.
Pièges
Problèmes courants :
- Oublier de développer le paquet (
argsau lieu deargs...) - Ordre d’évaluation dans les expressions de pliage (la direction gauche ou droite est importante pour les opérations non associatives)
- Temps de compilation accru en cas de récursion profonde
Vérification rapide
Quelle fonctionnalité de C++17 simplifie la somme de tous les éléments d’un paquet de paramètres ?
Récapitulatif
Les modèles variadiques gèrent un nombre variable d’arguments de modèle grâce aux paquets de paramètres. Les expressions de pliage de C++17 remplacent le code variadique récursif par des expressions concises. Associées à la transmission parfaite, elles permettent de créer des fonctions de fabrique et une sélection générique.
Questions Fréquemment Posées
La leçon « Modèles variadiques et paquets de paramètres » est-elle gratuite ?
Oui — le texte complet de « Modèles variadiques et paquets de paramètres » 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 « Modèles variadiques et paquets de paramètres » ?
Utiliser des paquets de paramètres et des expressions de repli pour écrire des modèles variadiques 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 « Modèles variadiques et paquets de paramètres » ?
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
- Modèles de fonctions et de classes : révision
- Spécialisation partielle et complète des modèles
- Modèles variadiques et paquets de paramètres
- Fonctions constexpr et if constexpr