«Modèles C ++: le guide complet» (c) 2002 - à jour avec C ++ 11?


10

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

2
Comme le langage C ++ lui-même ne change que lentement (des changements majeurs ne sont effectués que tous les 10 ans) et reste largement rétrocompatible, les livres sur C ++ ne vieillissent pas aussi vite non plus.
Bart van Ingen Schenau

Réponses:


12

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:


Il 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 2.5 - Modèles de fonctions - Résumé
    • Résolution de surcharge et meilleures pratiques
  • Ch 3.3 - Spécialisation des modèles de classe
  • Ch 3.4 - Spécialisation partielle
    • Ambiguïté (erreur ODR) et comment la résoudre. ODR = règle à définition unique
  • Ch 4.3 - Restrictions pour les paramètres de modèle non-type
    • Exemple: littéraux de chaîne avec liaison externe
  • 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

    • Pour un programmeur déjà familiarisé avec l'ensemble du Ch 3 (modèles de classes - bases), les Ch 8.1 et 8.2 doivent être lus immédiatement après le Ch 3, car les règles supplémentaires sont tout aussi importantes et pertinentes que les règles de base. Cela vous évitera quelques douleurs.
  • Le chapitre 8.3.1 (page 106 de la 12e impression) mentionne SFINAE pour la première fois.

  • Ch 8.3 - Cette section présente de nombreuses circonstances dans lesquelles la substitution d'arguments de modèle aurait conduit à des extensions syntaxiques absurdes (et deviendrait ainsi invalide, ce qui nécessiterait en retour SFINAE). Ce chapitre a une courbe d'apprentissage abrupte même pour les programmeurs C ++ expérimentés.
  • Ch 11 - Déduction d'argument modèle

    • Ch11 contient des exemples de déduction d'arguments de modèle artificiels qui sont nécessaires pour comprendre certaines des applications SFINAE également artificielles.
  • Ch 12.4 en avant - Spécialisation de modèle de classe partielle.

    • Cela couvre la mécanique interne souvent sollicitée dans une application SFINAE.

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.


3
Le problème avec une discussion pré-C ++ 11 sur TMP est qu'elle ne couvrira pas constexpret recommandera donc TMP pour toutes les métaprogrammations, même dans les cas où les constexprfonctions et les types seraient bien mieux adaptés.
Ben Voigt
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.