Aggiornato (2016/08/24)
Articolo consigliato con focus su C ++ 11:
Introduzione al concetto SFINAE di C ++: introspezione in fase di compilazione di un membro della classe (Jean Guegant)
Come studente di C ++ Template Metaprogramming alcuni mesi fa, consiglierei comunque di leggere questo libro.
Non include C ++ 11, ma espone la sintassi e le specifiche C ++ su come un compilatore dovrebbe elaborare il codice del template. Il libro copre molti angoli meno conosciuti che diventeranno cruciali se è necessario utilizzare i modelli C ++ in modo sostanziale, indipendentemente dal fatto che sia coinvolta o meno la metaprogrammazione.
Le parti mancanti da C ++ 11 sono:
- Tipo di supporto per i tratti.
- link
- Per la navigazione, posiziona il mouse sopra "Tipo supporto" nella parte superiore della pagina. Verrà visualizzato un elenco di
is_*
.
-
%codice%. link
-
%codice%. link
-
decltype
link
-
declval
link
Esiste un costrutto che vedrai molto nel codice che viene incollato su Stackoverflow: move
. Tuttavia, nella pratica, trovo questo piuttosto difficile da usare, a causa della Regola a una definizione e di SFINAE. Questo è il motivo per cui questo libro è importante, perché ripercorre le basi.
Se si utilizzano i modelli C ++ in modo sostanziale in una libreria multipiattaforma, è necessario testare il codice in diversi compilatori. Questo perché ogni compilatore ha un diverso livello di conformità alle specifiche C ++. Il codice che compila bene su uno può essere respinto dall'altro, e occasionalmente il compilatore che lo accetta è quello che rompe le specifiche.
Ecco le mie note di lettura quando passo questo libro. Spero che sarà utile.
Note per la lettura di libri - Modelli C ++ - La guida completa (2003)
- Ch 2.5 - Modelli funzione - Riepilogo
- Risoluzione del sovraccarico e best practice
- Ch 3.3 - Specializzazione dei modelli di classe
- Ch 3.4 - Specializzazione parziale
- Ambiguità (errore ODR) e come risolverlo. ODR = Regola a definizione singola
- Ch 4.3 - Limitazioni per i parametri modello non di tipo
- Esempio: stringhe letterali con linkage esterno
-
Ch 5 e Ch 6 - Questi due capitoli sono molto deprimenti. Potresti voler saltarlo e tornare indietro quando sei emotivamente pronto per usare i modelli.
-
Parte II (Cap 8 - Ch ???) La sezione delle cose avanzate.
-
Ch 8 - Altre regole
- Per un programmatore che abbia già familiarità con l'intero Ch 3 (modelli di classe - basi), i cap. 8.1 e 8.2 dovrebbero essere letti immediatamente dopo Ch 3, perché le regole aggiuntive sono altrettanto importanti e rilevanti delle regole di base. Ciò farà risparmiare un po 'di dolore.
-
Ch 8.3.1 (Pagina 106 in 12a ristampa) cita SFINAE per la prima volta.
- Ch 8.3 - Questa sezione introduce molte circostanze in cui la sostituzione degli argomenti del template avrebbe portato a espansioni sintattiche prive di senso (e quindi diventate non valide, cosa che in cambio richiede SFINAE). Questo capitolo ha una curva di apprendimento ripida anche per i programmatori C ++ esperti.
-
Ch 11 - Detrazione degli argomenti del modello
- Ch11 contiene alcuni esempi di Deduction di Argument Template deducibili che sono necessari per comprendere alcune delle applicazioni SFINAE ugualmente inventate.
-
Ch 12.4 in poi - Specializzazione del modello di classe parziale.
- Questo copre la meccanica interna che viene spesso chiamata in un'applicazione SFINAE.
Parte III (Ch 17 - Ch ???) Metaprogramming.