"Modelli C ++: la guida completa" (c) 2002 - aggiornato con C ++ 11?


10

Il libro C ++ Templates: The Complete Guide , (c) 2002, mi sembra molto interessante, ma dato che ha 12 anni, sono preoccupato che potrebbe non essere aggiornato. Ci sono alcune recensioni di Amazon molto favorevoli risalenti a un anno fa e non vedo altri titoli molto recenti sui modelli C ++. Qualcuno sa se un libro sui modelli pubblicato nel 2002 (al contrario di un libro specificamente sulla STL) avrebbe sintassi o concetti che sono stati sostituiti o aggiunti da, diciamo, C ++ 11?

Quanto segue è dalla descrizione del libro di Amazon :

I modelli sono tra le funzionalità più potenti di C ++, ma troppo spesso vengono trascurati, fraintesi e utilizzati in modo improprio. Modelli C ++: la Guida completa fornisce agli architetti e agli ingegneri del software una chiara comprensione del perché, quando e come utilizzare i modelli per creare e mantenere software più pulito, veloce e intelligente in modo più efficiente.

I modelli C ++ iniziano con un tutorial approfondito su concetti di base e funzionalità del linguaggio. Il resto del libro serve come riferimento completo, concentrandosi prima sui dettagli del linguaggio, quindi su una vasta gamma di tecniche di codifica e infine su applicazioni avanzate per i modelli. Gli esempi utilizzati nel libro illustrano concetti astratti e dimostrano le migliori pratiche.

I lettori imparano

  • I comportamenti esatti dei modelli
  • Come evitare le insidie ​​associate ai modelli
  • Modi di dire e tecniche, dal di base al precedentemente non documentato
  • Come riutilizzare il codice sorgente senza compromettere le prestazioni o la sicurezza
  • Come aumentare l'efficienza dei programmi C ++
  • Come produrre software più flessibile e gestibile

2
Poiché il linguaggio C ++ stesso cambia solo lentamente (le modifiche principali vengono apportate solo ogni 10 anni) e rimane ampiamente compatibile con le versioni precedenti, anche i libri su C ++ non invecchiano così velocemente.
Bart van Ingen Schenau,

Risposte:


12

Aggiornato (24/08/2016)

Articolo consigliato con focus su C ++ 11:

Un'introduzione al concetto SFINAE del C ++: introspezione in fase di compilazione di un membro della classe (Jean Guegant)


Come studente di metaprogrammazione dei modelli C ++ qualche mese fa, consiglierei ancora di leggere questo libro.

Non include C ++ 11, ma stabilisce la sintassi e le specifiche C ++ su come un compilatore dovrebbe elaborare il codice modello. Il libro tratta molti angoli meno conosciuti che diventeranno cruciali se è necessario utilizzare sostanzialmente i modelli C ++, indipendentemente dal fatto che sia coinvolta o meno la metaprogrammazione.


Le parti mancanti di C ++ 11 sono:


V'è un costrutto che si vedrà un sacco di codice che viene incollato su StackOverflow: std::enable_if. Tuttavia, in pratica, trovo che questo sia abbastanza difficile da usare, a causa della regola a una definizione e SFINAE. Ecco perché questo libro è importante, perché va oltre le basi.


Se si utilizzano sostanzialmente modelli C ++ in una libreria multipiattaforma, sarà necessario testare la compilazione del codice in diversi compilatori. Questo perché ogni compilatore ha un diverso livello di conformità alla specifica C ++. Il codice che viene compilato correttamente su uno può essere rifiutato dall'altro e, occasionalmente, il compilatore che lo accetta è quello che infrange la specifica.


Ecco le mie note di lettura quando sfoglio questo libro. Spero possa essere utile.

Note per la lettura di libri - Modelli C ++ - The Complete Guide (2003)

  • Cap 2.5 - Modelli di funzione - Riepilogo
    • Risoluzione di sovraccarico e migliori pratiche
  • Cap 3.3 - Specializzazione dei modelli di classe
  • Cap 3.4 - Specializzazione parziale
    • Ambiguità (errore ODR) e come risolverlo. ODR = Regola a una definizione
  • Cap 4.3 - Restrizioni per i parametri dei modelli non di tipo
    • Esempio: letterali di stringa con collegamento esterno
  • Ch 5 e Ch 6 - Questi due capitoli sono molto deprimenti. Potresti voler saltare e poi tornare indietro quando sei emotivamente pronto per usare i modelli.

  • Parte II (Ch 8 - Ch ???) La sezione di materiale avanzato.

  • Capitolo 8 - Altre regole

    • Per un programmatore che abbia già familiarità con l'intero Ch 3 (modelli di classe - nozioni di base), i Ch 8.1 e 8.2 dovrebbero essere letti immediatamente dopo il Ch 3, perché le regole aggiuntive sono altrettanto importanti e pertinenti delle regole di base. Questo farà risparmiare un po 'di dolore.
  • Il capitolo 8.3.1 (Pagina 106 nella dodicesima stampa) menziona SFINAE per la prima volta.

  • Ch 8.3 - Questa sezione introduce molte circostanze in cui la sostituzione dell'argomento template avrebbe portato a espansioni sintattiche senza senso (e quindi diventare non valide, il che a sua volta richiede SFINAE). Questo capitolo ha una ripida curva di apprendimento anche per i programmatori C ++ esperti.
  • Capitolo 11 - Deduzione argomento modello

    • Ch11 contiene alcuni esempi dedotti di deduzione degli argomenti modello necessari per comprendere alcune delle applicazioni SFINAE ugualmente inventate.
  • Dal 12.4 in poi - Specializzazione del modello di classe parziale.

    • Questo riguarda la meccanica interna che viene spesso chiamata in un'applicazione SFINAE.

Parte III (Ch 17 - Ch ???) Metaprogrammazione.

  • Capitolo 17 - Inizia con la programmazione funzionale introduttiva.

  • App. A.3 - Regola a una definizione (ODR) in dettaglio.


3
Il problema con una discussione pre-C ++ 11 su TMP è che non coprirà constexpre raccomanderà quindi TMP per tutte le metaprogrammazioni, anche nei casi in cui constexprfunzioni e tipi sarebbero molto più adatti.
Ben Voigt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.