Le livre C ++ Templates: The Complete Guide , (c) 2002, me semble très attrayant, mais comme il a 12 ans, je crains qu'il ne soit pas à jour. Il y a des critiques Amazon très favorables datant d'il y a un an, et je ne vois aucun autre titre très récent sur les modèles C ++. Est-ce que quelqu'un sait si un livre sur les modèles publiés en 2002 (par opposition à un livre spécifiquement sur la STL) aurait une syntaxe ou des concepts qui ont été remplacés ou ajoutés par, disons, C ++ 11?
Ce qui suit provient de la description du livre Amazon :
Les modèles sont parmi les fonctionnalités les plus puissantes de C ++, mais ils sont trop souvent négligés, mal compris et mal utilisés. Modèles C ++: le guide complet fournit aux architectes et ingénieurs logiciels une compréhension claire de pourquoi, quand et comment utiliser des modèles pour créer et maintenir plus efficacement des logiciels plus propres, plus rapides et plus intelligents.
Les modèles C ++ commencent par un didacticiel perspicace sur les concepts de base et les fonctionnalités du langage. Le reste du livre sert de référence complète, se concentrant d'abord sur les détails de la langue, puis sur un large éventail de techniques de codage, et enfin sur les applications avancées pour les modèles. Les exemples utilisés tout au long du livre illustrent des concepts abstraits et illustrent les meilleures pratiques.
Les lecteurs apprennent
- Les comportements exacts des modèles
- Comment éviter les pièges associés aux modèles
- Idiomes et techniques, du basique au non documenté
- Comment réutiliser le code source sans menacer les performances ou la sécurité
- Comment augmenter l'efficacité des programmes C ++
- Comment produire des logiciels plus flexibles et maintenables
Réponses:
Mis à jour (2016/08/24)
Article recommandé en mettant l'accent sur C ++ 11:
Une introduction au concept SFINAE de C ++: introspection en compilation d'un membre de la classe (Jean Guegant)
En tant qu'apprenant de la métaprogrammation de modèles C ++ il y a quelques mois, je recommanderais toujours de lire ce livre.
Il n'inclut pas C ++ 11, mais il présente la syntaxe et les spécifications C ++ sur la façon dont un compilateur doit traiter le code du modèle. Le livre couvre de nombreux coins moins connus qui deviendront cruciaux si vous devez utiliser substantiellement des modèles C ++, que la métaprogrammation soit impliquée ou non.
Les parties manquantes de C ++ 11 sont:
is_*
s'affiche.decltype
. http://en.cppreference.com/w/cpp/language/decltypedeclval
. http://en.cppreference.com/w/cpp/utility/declvalmove
http://en.cppreference.com/w/cpp/utility/moveforward
http://en.cppreference.com/w/cpp/utility/forwardIl y a une construction que vous verrez beaucoup de code qui est collé sur Stackoverflow:
std::enable_if
. Cependant, dans la pratique, je trouve cela assez difficile à utiliser, en raison de la règle à définition unique et de SFINAE. C'est pourquoi ce livre est important, car il va sur les bases.Si vous utilisez des modèles C ++ essentiellement dans une bibliothèque multiplateforme, vous devrez tester-compiler votre code dans différents compilateurs. En effet, chaque compilateur a un niveau de conformité différent à la spécification C ++. Le code qui compile bien sur l'un peut être rejeté par l'autre, et parfois le compilateur qui l'accepte est celui qui rompt la spécification.
Voici mes notes de lecture lorsque je passe en revue ce livre. J'espère que ce sera utile.
Notes de lecture de livres - Modèles C ++ - Le guide complet (2003)
Ch 5 et Ch 6 - Ces deux chapitres sont très déprimants. Vous voudrez peut-être l'ignorer, puis revenir en arrière lorsque vous serez émotionnellement prêt à utiliser des modèles.
Partie II (Ch 8 - Ch ???) La section des trucs avancés.
Ch 8 - Plus de règles
Le chapitre 8.3.1 (page 106 de la 12e impression) mentionne SFINAE pour la première fois.
Ch 11 - Déduction d'argument modèle
Ch 12.4 en avant - Spécialisation de modèle de classe partielle.
Partie III (Ch 17 - Ch ???) Métaprogrammation.
Ch 17 - Commence par une programmation fonctionnelle d'introduction.
App. A.3 - Règle à définition unique (ODR) en détail.
la source
constexpr
et recommandera donc TMP pour toutes les métaprogrammations, même dans les cas où lesconstexpr
fonctions et les types seraient bien mieux adaptés.