Templates et programmation générique
Écrivez des abstractions réellement génériques, réutilisables et sans surcoût grâce aux templates, aux concepts et à la programmation à la compilation.
Les bases des templates
Templates de fonctions et déduction de type
Apprenez à écrire des fonctions qui fonctionnent avec n'importe quel type. Comprenez la déduction des arguments de template, les paramètres non-type et pourquoi les templates résident dans les en-têtes.
Templates de classes et CTAD
Construisez des structures de données génériques avec les templates de classes. Comprenez les définitions de membres, les arguments par défaut et comment la CTAD de C++17 vous permet d'omettre les arguments de template.
Templates avancés
Spécialisation de templates et tag dispatch
Maîtrisez la spécialisation complète et partielle, apprenez quand privilégier la surcharge, et découvrez le tag dispatch et if constexpr comme alternatives pour le branchement à la compilation.
Templates variadiques et expressions de repli
Gérez un nombre quelconque d'arguments de template grâce aux packs de paramètres. Maîtrisez les expressions de repli (fold expressions) pour traiter les packs avec élégance, sans récursion.
SFINAE, type traits et enable_if
Comprenez le principe « Substitution Failure Is Not An Error », utilisez les type traits pour l'introspection à la compilation et contraignez les templates avec enable_if.
Programmation générique moderne
Concepts et contraintes en C++20
Définissez des exigences précises sur les arguments de template grâce aux concepts. Écrivez du code générique plus propre avec les clauses requires, les templates de fonctions abrégés et les concepts de la bibliothèque standard.
constexpr, consteval et programmation à la compilation
Déplacez les calculs de l'exécution vers la compilation avec constexpr, consteval et constinit. Construisez des tables de correspondance, validez des configurations et utilisez des conteneurs constexpr.
Motifs de métaprogrammation par templates
Maîtrisez les motifs de templates avancés : le CRTP pour le polymorphisme statique, la conception par politiques pour une composition flexible, l'effacement de type pour la généricité à l'exécution, et des repères pour choisir entre templates et dispatch virtuel.