web-dev-qa-db-fra.com

Meilleure introduction à la métaprogrammation de modèles C ++?

La métaprogrammation statique (ou "métaprogrammation de modèle") est une excellente technique C++ qui permet l'exécution de programmes au moment de la compilation. Une ampoule s'est éteinte dans ma tête dès que j'ai lu cet exemple canonique de métaprogrammation:

#include <iostream>
using namespace std;

template< int n >
struct factorial { enum { ret = factorial< n - 1 >::ret * n }; };

template<>
struct factorial< 0 > { enum { ret = 1 }; };

int main() {
    cout << "7! = " << factorial< 7 >::ret << endl; // 5040
    return 0;
}

Si l'on veut en savoir plus sur la métaprogrammation statique C++, quelles sont les meilleures sources (livres, sites Web, didacticiels en ligne, etc.)?

112
jwfearn

[Répondre à ma propre question]

Les meilleures introductions que j'ai trouvées jusqu'à présent sont le chapitre 10, "Métaprogrammation statique en C++" de Programmation générative, méthodes, outils et applications par Krzysztof Czarnecki et Ulrich W. Eisenecker, ISBN-13: 9780201309775; et le chapitre 17, "Métaprogrammes" de modèles C++: le guide complet par David Vandevoorder et Nicolai M. Josuttis, ISBN-13: 9780201734843.

alt textalt textalt textalt text

Todd Veldhuizen a un excellent tutoriel ici .

Une bonne ressource pour la programmation C++ en général est Design C++ moderne par Andrei Alexandrescu, ISBN-13: 9780201704310. Ce livre mélange un peu de métaprogrammation avec d'autres modèles techniques. Pour la métaprogrammation en particulier, voir les sections 2.1 "Assertions au moment de la compilation", 2.4 "Mappage des constantes intégrales aux types", 2.6 "Sélection du type", 2.7 "Détection de la convertibilité et de l'héritage au moment de la compilation", 2.9 "NullType et EmptyType "et 2.10" Traits de type ".

La meilleure ressource intermédiaire/avancée que j'ai trouvée est Métaprogrammation de modèle C++ par David Abrahams et Aleksey Gurtovoy, ISBN-13: 9780321227256

Si vous préférez un seul livre, procurez-vous Modèles C++: le guide complet car c'est aussi la référence définitive pour les modèles en général.

107
jwfearn

Le livre d'Andrei Alexandrescu Modern C++ Design couvre une grande partie de cela et d'autres astuces pour un code C++ moderne rapide et efficace et est la base de la bibliothèque Loki .

Il convient également de mentionner les bibliothèques Boost , qui utilisent fortement ces techniques et sont généralement de très haute qualité pour apprendre (bien que certaines soient assez denses).

23
Alaric

Modern C++ Design , un livre génial et un cadre de modèle de conception par Alexandrescu. Un mot d'avertissement, après avoir lu ce livre, j'ai cessé de faire du C++ et je me suis dit "Bon sang, je peux juste choisir un meilleur langage et l'obtenir gratuitement".

12
Florian Bösch

Deux bons livres qui me viennent à l'esprit sont:

  • Design C++ moderne/Andrei Alexandrescu (il a en fait 7 ans malgré le nom!)
  • Modèles C++: le guide complet/Vandevoorde & Josuttis

C'est un domaine assez approfondi, donc un bon livre comme l'un d'eux est certainement recommandé sur les sites Web. Certaines des techniques les plus avancées vous permettront d'étudier le code pendant un certain temps pour comprendre comment il fonctionne!

6
Nik

Il n'y aura pas une grande liste de livres, car la liste des personnes ayant beaucoup d'expérience est limitée. La métaprogrammation des modèles a commencé pour de vrai lors du premier atelier de programmation de modèles C++ en 2000, et de nombreux auteurs cités jusqu'ici y ont assisté. (IIRC, Andrei ne l'a pas fait.) Ces pionniers ont grandement influencé le domaine et, fondamentalement, ce qui devrait être écrit est maintenant écrit. Personnellement, je conseillerais Vandevoorde & Josuttis. Alexandrescu est un livre difficile si vous êtes nouveau dans le domaine.

5
MSalters

Modern C++ est l'une des meilleures introductions que j'ai lues. Il couvre des exemples réels utiles de métaprogrammation de modèle. Jetez également un œil à la bibliothèque associée Loki .

5
Eclipse

google Alexandrescu, Design C++ moderne: programmation générique et modèles de conception appliqués

4
Maxim Ananyev

Les papiers originaux de Veldhuizen étaient bons. Si vous voulez un livre entier, alors il y a le livre de Vandevoorde "C++ Templates Complete Guide". Et lorsque vous êtes prêt pour le cours de maîtrise, essayez la conception C++ moderne d'Alexandrescu.

4
eduffy