Migliore introduzione alla metaprogrammazione del modello C ++?

La metaprogrammazione statica (alias “template metaprogramming“) è una grande tecnica C ++ che consente l’esecuzione di programmi in fase di compilazione. Una lampadina mi è passata in testa non appena ho letto questo esempio canonico di metaprogrammazione:

#include  using namespace std; template struct factorial { enum { ret = factorial::ret * n }; }; template struct factorial { enum { ret = 1 }; }; int main() { cout << "7! = " << factorial::ret << endl; // 5040 return 0; } 

Se vuoi saperne di più sulla metaprogrammazione statica di C ++, quali sono le migliori fonti (libri, siti web, materiale didattico on-line, qualunque cosa)?

[Rispondendo alla mia domanda]

Le migliori introduzioni che ho trovato fino ad ora sono il capitolo 10, “Metaprogrammazione statica in C ++” da programmazione generativa, metodi, strumenti e applicazioni di Krzysztof Czarnecki e Ulrich W. Eisenecker, ISBN-13: 9780201309775; e capitolo 17, “Metaprograms” di C ++ Templates: The Complete Guide di David Vandevoorder e Nicolai M. Josuttis, ISBN-13: 9780201734843.

alt text http://sofit.miximages.com/c%2B%2B/30676941.jpg alt text http://sofit.miximages.com/c%2B%2B/31025235.jpg alt text http: // ak. buy.com/db_assets/prod_images/704/30680704.jpg alt text http://sofit.miximages.com/c%2B%2B/39856218.jpg

Todd Veldhuizen ha un eccellente tutorial qui .

Una buona risorsa per la programmazione C ++ in generale è Modern C ++ Design di Andrei Alexandrescu, ISBN-13: 9780201704310. Questo libro mescola un po ‘di metaprogrammazione con altre tecniche di template. In particolare, per la metaprogrammazione, vedere le sezioni 2.1 “Asserzioni del tempo di compilazione”, 2.4 “Mappatura delle costanti integrali ai tipi”, 2.6 “Selezione del tipo”, 2.7 “Rilevamento della convertibilità ed ereditarietà al momento della compilazione”, 2.9 ” NullType e EmptyType ” e 2.10 ” Digitare i tratti “.

La migliore risorsa intermedia / avanzata che ho trovato è C ++ Template Metaprogramming di David Abrahams e Aleksey Gurtovoy, ISBN-13: 9780321227256

Se preferisci un solo libro, ottieni i modelli C ++: la guida completa poiché è anche il riferimento definitivo per i modelli in generale.

Il libro Modern C ++ Design di Andrei Alexandrescu copre un sacco di questo e altri trucchi per un codice C ++ moderno, rapido ed efficiente ed è la base per la libreria Loki .

Vale la pena menzionare anche le librerie Boost , che utilizzano pesantemente queste tecniche e sono solitamente di qualità molto elevata da cui imparare (anche se alcune sono piuttosto dense).

Modern C ++ Design , una brillante struttura di libri e design di Alexandrescu. Parola di avvertimento, dopo aver letto questo libro ho smesso di fare C ++ e ho pensato “Che diamine, posso scegliere una lingua migliore e ottenerla gratuitamente”.

Due bei libri che ti vengono in mente sono:

  • Modern C ++ Design / Andrei Alexandrescu (In realtà ha 7 anni nonostante il nome!)
  • Modelli C ++: la guida completa / Vandevoorde e Josuttis

È un campo abbastanza approfondito, quindi un buon libro come uno di questi è decisamente consigliato sui siti web. Alcune delle tecniche più avanzate ti faranno studiare il codice per un po ‘di tempo per capire come funzionano!

Il moderno C ++ è una delle migliori introduzioni che ho letto. Copre esempi utili reali di metaprogrammazione del modello. Dai anche un’occhiata alla biblioteca del compagno Loki .

Non ci sarà una grande lista di libri, poiché l’elenco delle persone con molta esperienza è limitato. La metaprogrammazione dei modelli è iniziata per davvero attorno al primo C ++ Template Programming Workshop nel 2000, e molti degli autori nominati finora hanno partecipato. (IIRC, Andrei no.) Questi pionieri hanno fortemente influenzato il campo, e in pratica quello che dovrebbe essere scritto è ora scritto. Personalmente, consiglierei Vandevoorde e Josuttis. Alexandrescu è un libro difficile se sei nuovo sul campo.

I documenti originali di Veldhuizen erano buoni. Se hai un intero libro, allora c’è il libro di Vandevoorde “C ++ Templates Complete Guide”. E quando sei pronto per il master, prova Design moderno C ++ di Alexandrescu.

google Alexandrescu, Modern C ++ Design: modelli generici di programmazione e design applicati