"C ++ - Vorlagen: Das vollständige Handbuch" (c) 2002 - auf dem neuesten Stand mit C ++ 11?


10

Das Buch C ++ Templates: The Complete Guide , (c) 2002, sieht für mich sehr ansprechend aus, aber da es 12 Jahre alt ist, befürchte ich, dass es veraltet sein könnte. Es gibt einige sehr günstige Amazon-Rezensionen, die noch vor einem Jahr datiert wurden, und ich sehe keine anderen sehr aktuellen Titel in C ++ - Vorlagen. Weiß jemand, ob ein 2002 veröffentlichtes Buch über Vorlagen (im Gegensatz zu einem Buch speziell über die STL) Syntax oder Konzepte enthält, die beispielsweise durch C ++ 11 ersetzt oder ergänzt wurden?

Folgendes stammt aus der Amazon-Buchbeschreibung :

Vorlagen gehören zu den leistungsstärksten Funktionen von C ++, werden jedoch zu oft vernachlässigt, missverstanden und missbraucht. C ++ - Vorlagen: Das vollständige Handbuch bietet Softwarearchitekten und -ingenieuren ein klares Verständnis dafür, warum, wann und wie Vorlagen verwendet werden, um sauberere, schnellere und intelligentere Software effizienter zu erstellen und zu warten.

C ++ - Vorlagen beginnen mit einem aufschlussreichen Tutorial zu grundlegenden Konzepten und Sprachfunktionen. Der Rest des Buches dient als umfassende Referenz und konzentriert sich zunächst auf Sprachdetails, dann auf eine breite Palette von Codierungstechniken und schließlich auf erweiterte Anwendungen für Vorlagen. Im gesamten Buch verwendete Beispiele veranschaulichen abstrakte Konzepte und zeigen Best Practices.

Leser lernen

  • Das genaue Verhalten von Vorlagen
  • So vermeiden Sie die mit Vorlagen verbundenen Fallstricke
  • Redewendungen und Techniken, von den grundlegenden bis zu den zuvor nicht dokumentierten
  • So verwenden Sie den Quellcode wieder, ohne die Leistung oder Sicherheit zu gefährden
  • So steigern Sie die Effizienz von C ++ - Programmen
  • So erstellen Sie flexiblere und wartbarere Software

2
Da sich die C ++ - Sprache selbst nur langsam ändert (größere Änderungen werden nur alle 10 Jahre vorgenommen) und weitgehend abwärtskompatibel bleibt, altern Bücher über C ++ auch nicht so schnell.
Bart van Ingen Schenau

Antworten:


12

Aktualisiert (24.08.2016)

Empfohlener Artikel mit Schwerpunkt auf C ++ 11:

Eine Einführung in das SFINAE-Konzept von C ++: Introspektion eines Klassenmitglieds zur Kompilierungszeit (Jean Guegant)


Als Anfänger der C ++ - Vorlagen-Metaprogrammierung vor einigen Monaten würde ich dennoch empfehlen, dieses Buch zu lesen.

Es enthält kein C ++ 11, enthält jedoch die Syntax und die C ++ - Spezifikationen, wie ein Compiler Vorlagencode verarbeiten soll. Das Buch behandelt viele weniger bekannte Ecken, die von entscheidender Bedeutung sind, wenn Sie C ++ - Vorlagen im Wesentlichen verwenden müssen, unabhängig davon, ob es sich um Metaprogrammierung handelt oder nicht.


Die fehlenden Teile von C ++ 11 sind:


Es gibt ein Konstrukt, das häufig im Code angezeigt wird, der in Stackoverflow eingefügt wird : std::enable_if. In der Praxis finde ich dies jedoch aufgrund der One-Definition-Regel und der SFINAE ziemlich schwierig. Deshalb ist dieses Buch wichtig, weil es die Grundlagen behandelt.


Wenn Sie C ++ - Vorlagen im Wesentlichen in einer plattformübergreifenden Bibliothek verwenden, müssen Sie Ihren Code in verschiedenen Compilern testen und kompilieren. Dies liegt daran, dass jeder Compiler die C ++ - Spezifikation unterschiedlich gut einhält. Code, der auf einem gut kompiliert wird, kann vom anderen abgelehnt werden, und gelegentlich ist der Compiler, der ihn akzeptiert, derjenige, der die Spezifikation verletzt.


Hier sind meine Lese-Notizen, wenn ich dieses Buch durcharbeite. Hoffe es wird hilfreich sein.

Anmerkungen zum Lesen von Büchern - C ++ - Vorlagen - The Complete Guide (2003)

  • Kapitel 2.5 - Funktionsvorlagen - Zusammenfassung
    • Überlastungsauflösung und Best Practices
  • Kapitel 3.3 - Spezialisierung von Klassenvorlagen
  • Kapitel 3.4 - Teilspezialisierung
    • Mehrdeutigkeit (ODR-Fehler) und wie man sie behebt. ODR = One-Definition-Regel
  • Kapitel 4.3 - Einschränkungen für nicht typisierte Vorlagenparameter
    • Beispiel: String-Literale mit externer Verknüpfung
  • Kapitel 5 und Kapitel 6 - Diese beiden Kapitel sind sehr deprimierend. Sie können es überspringen und dann zurückkehren, wenn Sie emotional bereit sind, Vorlagen zu verwenden.

  • Teil II (Ch 8 - Ch ???) Der Abschnitt über fortgeschrittene Sachen.

  • Kapitel 8 - Weitere Regeln

    • Für einen Programmierer, der bereits mit dem gesamten Kapitel 3 (Klassenvorlagen - Grundlagen) vertraut ist, sollten Kapitel 8.1 und 8.2 unmittelbar nach Kapitel 3 gelesen werden, da die zusätzlichen Regeln genauso wichtig und relevant sind wie die Grundregeln. Dies erspart einige Schmerzen.
  • In Kapitel 8.3.1 (Seite 106 im 12. Druck) wird SFINAE zum ersten Mal erwähnt.

  • Kapitel 8.3 - In diesem Abschnitt werden viele Umstände vorgestellt, unter denen das Ersetzen von Vorlagenargumenten zu unsinnigen syntaktischen Erweiterungen geführt hätte (und somit ungültig geworden wäre, was wiederum SFINAE erforderlich macht). Dieses Kapitel hat selbst für erfahrene C ++ - Programmierer eine steile Lernkurve.
  • Kapitel 11 - Abzug von Vorlagenargumenten

    • Kapitel 11 enthält einige Beispiele für den Abzug von Vorlagenargumenten, die zum Verständnis einiger der gleichermaßen erfundenen SFINAE-Anwendungen erforderlich sind.
  • Ab Kapitel 12.4 - Spezialisierung auf Teilklassenvorlagen.

    • Dies umfasst die interne Mechanik, die in einer SFINAE-Anwendung häufig benötigt wird.

Teil III (Ch 17 - Ch ???) Metaprogrammierung.

  • Kapitel 17 - Beginnt mit der Einführung in die funktionale Programmierung.

  • App. A.3 - One-Definition-Regel (ODR) im Detail.


3
Das Problem bei einer TMP-Diskussion vor C ++ 11 ist, dass es TMP nicht abdeckt constexprund daher TMP für alle Metaprogrammierungen empfiehlt, auch für Fälle, in denen constexprFunktionen und Typen weitaus besser geeignet wären.
Ben Voigt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.