Question

La métaprogrammation statique (ou "métaprogrammation de modèles") 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 de métaprogrammation canonique:

#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 en C ++, quelles sont les meilleures sources (livres, sites Web, didacticiels en ligne, etc.)?

Était-ce utile?

La solution

[Réponse à ma propre question]

Les meilleures introductions que j’ai trouvées jusqu’à présent sont celles du chapitre 10, "Métaprogrammation statique en C ++". from Programmation, méthodes, outils et applications génératifs de Krzysztof Czarnecki et Ulrich W. Eisenecker, ISBN-13: 9780201309775; et au chapitre 17, "Métaprogrammes". de Modèles C ++: Le Guide complet de David Vandevoorder et Nicolai M. Josuttis, ISBN-13: 9780201734843.

alt text  alt text  alt text  alt text

Todd Veldhuizen dispose d’un excellent didacticiel ici .

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

La meilleure ressource intermédiaire / avancée que j'ai trouvée est la métaprogrammation de modèles 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 il s'agit également de la référence définitive pour les modèles en général.

Autres conseils

Le conception en C ++ moderne d'Andrei Alexandrescu couvre en grande partie ce livre. et d’autres astuces pour un code C ++ moderne rapide et efficace et constitue la base de la bibliothèque Loki .

Il convient également de mentionner les bibliothèques Boost , qui recourent énormément à ces techniques et dont la qualité d'apprentissage est généralement excellente ( bien que certains soient assez denses).

Design C ++ moderne , un livre génial et un modèle de conception conçu par Alexandrescu. Message d’avertissement, après avoir lu ce livre, j’ai arrêté de travailler en C ++ et me suis dit que je pouvais choisir un meilleur langage et le recevoir gratuitement.

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

  • Design moderne en C ++ / Andrei Alexandrescu (En fait, il a 7 ans malgré son nom!)
  • Modèles C ++: Le Guide complet / Vandevoorde & amp; Josuttis

Il s’agit d’un domaine assez approfondi. Un bon livre comme celui-ci est donc recommandé aux sites Web. Certaines des techniques les plus avancées vous inciteront à étudier le code pendant un certain temps pour comprendre leur fonctionnement!

Le C ++ moderne est l'une des meilleures introductions que j'ai lues. Il couvre des exemples concrets de métaprogrammation de modèles. Consultez également la Loki bibliothèque associée.

La liste des livres ne sera pas longue, car la liste des personnes ayant beaucoup d’expérience est limitée. La métaprogrammation des modèles a véritablement débuté autour du premier atelier de programmation de modèles C ++ en 2000, et de nombreux auteurs nommés jusqu’à présent y ont participé. (IIRC, Andrei non.) Ces pionniers ont beaucoup influencé le domaine, et en gros ce qui devrait être écrit est maintenant écrit. Personnellement, je conseillerais Vandevoorde & amp; Josuttis. Alexandrescu est un livre difficile si vous êtes nouveau sur le terrain.

Les papiers originaux de Veldhuizen étaient bons. Si vous êtes prêt pour un livre entier, alors il y a le livre de Vandevoorde "C ++ Templates Complete Guide". Et lorsque vous serez prêt pour le master, essayez le design en C ++ moderne d’Alexandrescu.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top