|
|||||||||||||||||||||||||||
|
|
HOME | SEMINARS | TALKS | ARTICLES | BOOKS | LINKS | IOSTREAMS | GENERICS | ABOUT | NEWSLETTER | CONTACT | SITEMAP | ||||||||||||||||||||||||||
|
Book Review - C++ Templates - The Complete Guide
|
|||||||||||||||||||||||||||
|
C++ Templates - The Complete Guide
OBJEKTspektrum, März 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
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.
|
||||||||||||||||||||||||||