La métaprogrammation statique (alias «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 C ++, quelles sont les meilleures sources (livres, sites Web, didacticiels en ligne, peu importe)?
c++
templates
metaprogramming
jwfearn
la source
la source
Réponses:
[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» des modèles C ++: Le guide complet par David Vandevoorder et Nicolai M. Josuttis, ISBN-13: 9780201734843.
Todd Veldhuizen a un excellent tutoriel ici .
Une bonne ressource pour la programmation C ++ en général est Modern C ++ Design par 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 des constantes intégrales aux types", 2.6 "Sélection de type", 2.7 "Détection de la convertibilité et de l'héritage au moment de la compilation", 2.9 "
NullType
etEmptyType
" et 2.10 "Traits de type ".La meilleure ressource intermédiaire / avancée que j'ai trouvée est métaprogrammation de modèles C ++ par David Abrahams et Aleksey Gurtovoy, ISBN-13: 9780321227256
Si vous préférez un seul livre, obtenez les modèles C ++: le guide complet car c'est également la référence définitive pour les modèles en général.
la source
Le livre Modern C ++ Design d' Andrei Alexandrescu couvre beaucoup de ces astuces et d'autres pour un code C ++ moderne rapide et efficace et constitue la base du Loki bibliothèque .
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).
la source
Modern C ++ Design , un livre brillant et un framework de modèles de conception par Alexandrescu. Un mot d'avertissement, après avoir lu ce livre, j'ai arrêté de faire du C ++ et j'ai pensé "Que diable, je peux simplement choisir un meilleur langage et l'obtenir gratuitement".
la source
Deux bons livres qui me viennent à l'esprit sont:
C'est un domaine assez approfondi, donc un bon livre comme celui-ci est définitivement 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 elles fonctionnent!
la source
Le C ++ moderne est l'une des meilleures introductions que j'ai lues. Il couvre des exemples utiles de métaprogrammation de modèles. Jetez également un œil à la bibliothèque compagnon Loki .
la source
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 de modèles a commencé pour de vrai autour du premier atelier de programmation de modèles C ++ en 2000, et de nombreux auteurs cités jusqu'à présent y ont participé. (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.
la source
Les papiers originaux de Veldhuizen étaient bons. Si vous êtes prêt pour un livre entier, alors il y a le livre de Vandevoorde "Guide complet des modèles C ++". Et lorsque vous êtes prêt pour le cours de maîtrise, essayez la conception moderne C ++ d'Alexandrescu.
la source
google Alexandrescu, Conception C ++ moderne: programmation générique et modèles de conception appliqués
la source