Meilleure introduction à la métaprogrammation de modèles C ++? [fermé]
-
02-07-2019 - |
Question
#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.)?
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.
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
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.
google Alexandrescu, conception C ++ moderne: modèles génériques de programmation et de conception appliqués