Domanda

La metaprogrammazione statica (aka "metaprogrammazione di template") è una grande tecnica C ++ che consente l'esecuzione di programmi in fase di compilazione. Una lampadina si è spenta nella mia testa non appena ho letto questo esempio di metaprogrammazione canonica:

#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;
}

Se si desidera saperne di più sulla metaprogrammazione statica C ++, quali sono le migliori fonti (libri, siti Web, corsi online, qualunque cosa)?

È stato utile?

Soluzione

[Rispondere alla mia domanda]

Le migliori introduzioni che ho trovato finora sono il capitolo 10 "Metaprogrammazione statica in C ++" da Programmazione, metodi, strumenti e applicazioni generativi di Krzysztof Czarnecki e Ulrich W. Eisenecker, ISBN-13: 9780201309775; e capitolo 17 "Metaprogrammi" di Modelli C ++: la guida completa di David Vandevoorder e Nicolai M. Josuttis, ISBN-13: 9780201734843.

alt text  alt text  alt text  alt text

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. Per la metaprogrammazione in particolare, vedere le sezioni 2.1 "Asserzioni tempo di compilazione", 2.4 "Mappatura delle costanti integrali ai tipi", 2.6 "Selezione del tipo", 2.7 "Rilevamento della convertibilità e dell'ereditarietà al momento della compilazione" 2.9 " NullType e EmptyType " e 2.10 "Tipo di 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 Modelli C ++: la guida completa poiché è anche il riferimento definitivo per i modelli in generale.

Altri suggerimenti

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

Vale anche la pena menzionare le Boost , che utilizzano fortemente queste tecniche e di solito sono di altissima qualità da cui imparare ( anche se alcuni sono piuttosto densi).

Modern C ++ Design , un brillante libro e design pattern di Alexandrescu. Avvertenza, dopo aver letto questo libro ho smesso di fare C ++ e ho pensato " Che diamine, posso semplicemente scegliere una lingua migliore e ottenerla gratuitamente " ;.

Due buoni libri che mi vengono in mente sono:

  • Modern C ++ Design / Andrei Alexandrescu (In realtà ha 7 anni nonostante il nome!)
  • Modelli C ++: The Complete Guide / Vandevoorde & amp; Josuttis

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

Modern C ++ è una delle migliori presentazioni che ho letto. Copre esempi utili reali di metaprogrammazione di modelli. Dai un'occhiata anche alla libreria di accompagnamento Loki .

Non ci sarà un ampio elenco di libri, poiché l'elenco delle persone con molta esperienza è limitato. La metaprogrammazione dei modelli è iniziata davvero intorno al primo seminario sulla programmazione dei modelli C ++ nel 2000 e molti degli autori nominati finora hanno partecipato. (IIRC, Andrei no.) Questi pionieri hanno fortemente influenzato il campo, e in sostanza ciò che dovrebbe essere scritto è ora scritto. Personalmente, consiglierei Vandevoorde & amp; Josuttis. Alexandrescu's è un libro difficile se sei nuovo sul campo.

I documenti originali di Veldhuizen erano buoni. Se cerchi un libro intero, allora c'è il libro di Vandevoorde " C ++ Templates Complete Guide " ;. E quando sei pronto per il master, prova il moderno design C ++ di Alexandrescu.

google Alexandrescu, Design moderno C ++: schemi di programmazione e progettazione generici applicati

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top