Angelika Langer - Training & Consulting

 
HOME | SEMINARS | TALKS | ARTICLES | BOOKS | LINKS | IOSTREAMS | GENERICS | ABOUT | NEWSLETTER | CONTACT | SITEMAP
Book Review - C++ Templates - The Complete Guide

Books  
HOME 
SEMINARS 
TALKS 
ARTICLES 

BOOKS

  OVERVIEW
  REVIEWS

  BIBLIOGRAPHY    
    J2SE
    J2EE
    CORE C++
    STL
    TEMPLATES
    IOSTREAMS
    CONCURRENCY
    I18N
    PATTERNS
    OOA/OOD
    TESTING
    MANAGEMENT
 

LINKS 
IOSTREAMS 
GENERICS 
ABOUT 
NEWSLETTER 
CONTACT 
SITEMAP 
Book Review - C++ Templates - The Complete Guide

C++ Templates - The Complete Guide
Buchreview
 

OBJEKTspektrum, März 2003
Klaus Kreft & Angelika Langer

 
Daveed Vondevoorde & Nicolai Josuttis
"C++ Templates - The Complete Guide"
Addison-Wesley, 2003

 

"C++ Templates: The Complete Guide" von David Vandevoorde und Nicolai Josuttis  ist das erste C++-Buch, das sich ausschließlich dem Thema der C++ Templates widmet.  Auf ca. 500 Seiten erfährt man so ziemlich alles, was es derzeit zum Thema Templates zu sagen gibt.

Das Buch zerfällt in 4 Teile

  • ein Tutorial, das die Grundlagen der Template-Sprachmittel beschreibt (ca. 80 Seiten),
  • einen Teil über die Template-Spachmittel aus Compiler-Sicht, der die Feinheiten der Sprachmittel beschreibt (ca. 130 Seiten),
  • einen Teil über Template-Programmiertechniken (ca. 120 Seiten), und
  • einen Teil, der fortgeschrittene Template-Anwendungen zeigt (ca. 130 Seiten).


Das Tutorial ist sicher der Teil des Buchs, der dem Anfänger am meisten bringen wird. Es werden die gängigen Template-Sprachmittel dargestellt mit kurzen Beispielprogrammen.  Das Tutorial ist nicht unbedingt der bemerkenswerteste Teil des Buchs; man findet solche Tutorials in ähnlicher Form in "normalen" C++-Büchern wie zum Beispiel dem Standardwerk  " The C++ Programming Language " von Bjarne Stroustrup. Aber ohne Einführung wäre das Buch unvollständig, weil der Leser ohne Kenntnis von den Grundlagen der Template-Programmierung den Rest des Buchs nicht verstehen kann.

Richtig spannend wird es im zweiten Teil.  Da geht es um die Details der Sprachmittel.  Die Ausführungen geben Einblicke in die Arbeitsweise des Compilers, wie man sie nur selten in Büchern über Programmiersprachen findet.  (Der einzige Titel, der einem in diesem Zusammenhang in den Sinn kommt, ist Stan Lippman?s Buch " Inside the C++ Object Model ", in dem Details wie der Mechanismus der virtuellen Funktionen und das Layout von Klassen mit  Multiple Inheritance erklärt wird.) Endlich erklärt einmal jemand klipp und klar, wie das mit den Deklarationen von Friends im Zusammenhang mit Templates wirklich geht, und wie Name-Lookup, Template Argument Deduktion, Template Spezialisierung und Template Overloading funktionieren.  Das ist mit Abstand der beste Teil des Buchs.  Der Template-Kenner findet hier das eine oder andere Detail, das ihm vielleicht noch nicht hundertprozentig klar war und der Anfänger wird sicher später einmal dankbar auf diesen Teil zurückgreifen, wenn es gilt , die Details zu verstehen.

Der dritte Teil befaßt sich mit Template-Programmiertechniken.  Hier findet man in sehr gut aufbereiteter Form die Techniken, die in heute existierenden Template-Bibliotheken wie STL, Loki, Boost, und Expression Template Bibliotheken wie Blitz oder PETE verwendet werden.  Wer diese Bibliotheken studiert hat, kennt diese Techniken bereits.  Die Ausführungen in diesem Buch sind sehr gut, weil sie die Techniken präzise auf den Punkt bringen und sehr klar heraus arbeiten. Dargestellt werden die Prinzipien des statischen Polymorphismus, Traits- und Policy-Klassen, das Curiously-Recurring-Template-Pattern, Template-Meta-Programmierung und Expression-Templates. Nach dem Studium dieser Kapitel hat man die entsprechenden Techniken bereits so weit verstanden, daß man sie ohne Mühe auf andere Situationen in der eigenen praktischen Arbeit anwenden kann.

Im vierten Teil werden Anwendungen der Programmiertechniken gezeigt.  Hier werden Implementierungen von Smart Pointern, Tuples und Funktions-Objekten besprochen.  Ob der Leser diese Beispiele als relevant für seine praktische Arbeit erachtet, hängt sicher von jedem einzelnen Leser und seinem Aufgabenfeld ab.  Beispielsweise wird man wohl kaum einen Smart Pointer selbst implementieren wollen.  Es gibt genügend frei verfügbare Implementierungen in Bibliotheken wie Boost und Loki, die man ohne Bedenken benutzen kann. (Der boost::shared_ptr ist z.B. bereits für die Aufnahme in die nächste Version der C+-Standardbibliothek vorgeschlagen und hat gute Chancen, in ein paar Jahren der Standard-Smart-Pointer zu sein.) Das muß den Leser aber nicht notwendig davon abhalten, sich die Implementierungstechniken für Smart Pointer genauer anzusehen, denn man kann daraus eine Menge über Templates lernen.  In diesem Sinne ist dieser letzte Teil des Buchs zwar interessant, aber für die praktische Arbeit des einen oder anderen Lesers vielleicht nicht unbedingt so relevant wie die übrigen Teile des Buch. Wer keine Funktionsobjekttypen implementiert, wird wenig mit den dargestellten Techniken für die Function Object Composition oder den Value Bindern anfangen können. Und Template-Metaprogrammierung ist nur in einigen Bereichen der C++-Programmierung von Bedeutung.

Insgesamt kann man sagen, daß das Buch gut und empfehlenswert ist. Für den ambitionierten Template-Programmierer mit guten Vorkenntnissen bezüglich C++-Templates ist es eine echte Bereicherung.  Entwickler, die jedoch bislang wenig Berührung mit Templates hatten und fertige Templates zwar benutzt aber nie selber welche implementiert haben, sollten darauf gefaßt sein, daß das Buch sehr in die Tiefe geht.  Insbesondere bei den hinteren Teilen des Buchs wird man sich anfänglich vielleicht zu Recht fragen, was das mit der praktischen Programmierung in Industrieprojekten zu tun hat. Simple und praktische Anwendungen von Templates, wie in diesem Artikel dargestellt, vermißt man in diesem Buch. Es wird eigentlich schon voraus gesetzt, daß man weiß, was man mit Templates alles anfangen kann und daß man sie einsetzen will.  Warum Templates eigentlich Sinn machen und in welchem Kontext überhaupt, wird gar nicht mehr motiviert. Es ist also insgesamt eher ein Buch für Template-Profis, oder solche, die es werden wollen, und weniger ein Buch für die vorsichtige Annäherung an C++-Templates.
 


 
© Copyright 1995-2003 by Angelika Langer.  All Rights Reserved.    URL: < http://www.AngelikaLanger.com/Articles/Reviews/Vandevoorde/Templates.html  last update: 29 Oct 2003