Statische Metaprogrammierung (auch als "Template-Metaprogrammierung" bezeichnet) ist eine großartige C ++ - Technik, mit der Programme zur Kompilierungszeit ausgeführt werden können. Eine Glühbirne ging in meinem Kopf aus, sobald ich dieses kanonische Metaprogrammierungsbeispiel las:
#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;
}
Wenn Sie mehr über statische C ++ - Metaprogrammierung erfahren möchten, welche Quellen sind die besten (Bücher, Websites, Online-Kursunterlagen usw.)?
c++
templates
metaprogramming
jwfearn
quelle
quelle
Antworten:
[Beantwortung meiner eigenen Frage]
Die besten Einführungen, die ich bisher gefunden habe, sind Kapitel 10, "Statische Metaprogrammierung in C ++" aus Generative Programmierung, Methoden, Werkzeuge und Anwendungen von Krzysztof Czarnecki und Ulrich W. Eisenecker, ISBN-13: 9780201309775; und Kapitel 17, "Metaprogramme" von C ++ - Vorlagen: Der vollständige Leitfaden von David Vandevoorder und Nicolai M. Josuttis, ISBN-13: 9780201734843.
Todd Veldhuizen verfügt über eine hervorragende Tutorial hier .
Eine gute Ressource für die C ++ - Programmierung im Allgemeinen ist Modern C ++ Design von Andrei Alexandrescu, ISBN-13: 9780201704310. Dieses Buch mischt ein wenig Metaprogrammierung mit anderen Vorlagentechniken. Insbesondere zur Metaprogrammierung siehe Abschnitte 2.1 "Zusicherungen zur Kompilierungszeit", 2.4 "Zuordnen integraler Konstanten zu Typen", 2.6 "Typauswahl", 2.7 "Erkennen von Konvertierbarkeit und Vererbung zur Kompilierungszeit", 2.9 "
NullType
undEmptyType
" und 2.10 "Typmerkmale ".Die beste Ressource für Fortgeschrittene, die ich gefunden habe, ist C ++ Template Metaprogramming von David Abrahams und Aleksey Gurtovoy, ISBN-13: 9780321227256
Wenn Sie nur ein Buch bevorzugen, besorgen Sie sich C ++ - Vorlagen: Das vollständige Handbuch, da es auch die endgültige Referenz für Vorlagen im Allgemeinen ist.
quelle
Andrei Alexandrescus Modern C ++ Design- Buch behandelt viele dieser und anderer Tricks für schnellen und effizienten modernen C ++ - Code und ist die Grundlage für die Loki- Bibliothek.
Erwähnenswert sind auch die Boost- Bibliotheken, die diese Techniken häufig verwenden und normalerweise von sehr hoher Qualität sind, um daraus zu lernen (obwohl einige ziemlich dicht sind).
quelle
Modernes C ++ - Design , ein brillantes Buch- und Designmuster-Framework von Alexandrescu. Wort der Warnung, nachdem ich dieses Buch gelesen hatte, hörte ich auf, C ++ zu machen und dachte: "Was zum Teufel, ich kann einfach eine bessere Sprache auswählen und sie kostenlos bekommen."
quelle
Zwei gute Bücher, die mir in den Sinn kommen, sind:
Es ist ein ziemlich tiefgreifendes Feld, daher wird ein gutes Buch wie eines davon definitiv über Websites empfohlen. Bei einigen der fortgeschritteneren Techniken müssen Sie den Code einige Zeit studieren, um herauszufinden, wie sie funktionieren!
quelle
Modernes C ++ ist eine der besten Einführungen, die ich gelesen habe. Es werden aktuelle nützliche Beispiele für die Metaprogrammierung von Vorlagen behandelt. Schauen Sie sich auch die Begleitbibliothek Loki an .
quelle
Es wird keine große Liste von Büchern geben, da die Liste der Personen mit viel Erfahrung begrenzt ist. Die Metaprogrammierung von Vorlagen begann um den ersten C ++ - Workshop zur Vorlagenprogrammierung im Jahr 2000 und viele der bisher genannten Autoren nahmen daran teil. (IIRC, Andrei nicht.) Diese Pioniere haben das Feld stark beeinflusst, und im Grunde ist jetzt geschrieben, was geschrieben werden sollte. Persönlich würde ich Vandevoorde & Josuttis beraten. Alexandrescu's ist ein hartes Buch, wenn Sie neu auf dem Gebiet sind.
quelle
Veldhuizens Originalpapiere waren gut. Wenn Sie Lust auf ein ganzes Buch haben, dann gibt es Vandevoordes Buch "C ++ Templates Complete Guide". Und wenn Sie für den Masterkurs bereit sind, probieren Sie Alexandrescus Modern C ++ Design.
quelle
google Alexandrescu, Modernes C ++ - Design: Generische Programmierung und angewandte Entwurfsmuster
quelle