Skip to main content

2016 | Buch

C++-Metaprogrammierung

Eine Einführung in die Präprozessor- und Template-Metaprogrammierung

verfasst von: Jürgen Lemke

Verlag: Springer Berlin Heidelberg

Buchreihe : Xpert.press

insite
SUCHEN

Über dieses Buch

Dieses Buch ist das erste deutschsprachige Fachbuch zur C++-Metaprogrammierung. Es hilft dem C++ Programmierer, die Metaprogrammierung zu verstehen und die Vorteile für den täglichen Gebrauch zu erkennen. Durch die umfangreiche Darstellung der Grundlagen der Präprozessor- und Template-Metaprogrammierung bietet das Buch einen strukturierten Einstieg, für den Grundkenntnisse in C++ ausreichend sind. Die Anwendung der Metaprogrammierung und ihr Zusammenspiel mit Softwaresystemen werden an vielen Beispielen ausführlich erläutert. Die Generierung der Modulschnittstellen wird hierbei erstmalig beschrieben. Es wird in den Beispielen der Metaprogrammierung sowohl auf den Standard C++11 als auch auf die .NET-Erweiterung C++/CLI eingegangen.

Inhaltsverzeichnis

Frontmatter
1. Einleitung
Zusammenfassung
Das vorliegende Buch soll dem C++-Programmierer helfen, die Metaprogrammierung zu verstehen und die Vorteile für den täglichen Gebrauch zu erkennen. Das Buch bietet einen strukturierten Einstieg, für den Grundkenntnisse in C++ ausreichend sind. Es werden neben den Grundlagen der Präprozessor- und Templateprogrammierung Programmiertechniken und Beispiele vorgestellt, die das Grundverständnis für die Metaprogrammierung wecken sollen. Alle Beispiele sind kompatibel zum Standard C++98 es sei denn, sie sind explizit für den Standard C++11 gekennzeichnet.
Jürgen Lemke

Grundlagen

Frontmatter
2. C-Präprozessor
Zusammenfassung
Der C-Präprozessor ist Bestandteil der Programmiersprache C und damit auch C++. Mit ihm ist es möglich, den Quelltext in einem ersten Übersetzungsschritt zu verändern, bevor der Compiler den daraus entstandenen Quellcode übersetzt. Nach Bjarne Stroustrup [1] sollten Makros in C++ nur benutzt werden, wenn es unabdingbar ist, denn sie demonstrieren eine Schwäche in der Programmiersprache selbst, im Programm oder beim Programmierer.
Jürgen Lemke
3. Templates
Zusammenfassung
In C++ werden Templates, die in Funktions- und Klassentemplates eingeteilt werden können, sehr häufig verwendet. Ein Zeugnis hierfür ist die Standard Template Library, die fast ausschließlich aus templatebasiertem Quellcode besteht.
Jürgen Lemke
4. Erweiterte Metaprogrammierung
Zusammenfassung
Die erweiterte Metaprogrammierung geht über das hinaus, was in den Grundlagen der C++-Templates behandelt werden konnte. In diesem Kapitel werden Techniken und Tricks vorgestellt, um Typen in Typlisten zu verwalten oder mit Type-Traits zusätzliche Typinformationen zur Kompilationszeit zu erhalten, die für das Generieren von Quellcode unabdingbar sind. Damit lassen sich die meisten Metafunktionen der Standard Template Library besser verstehen und anwenden. Die wichtigsten Metafunktionen der Standard Template Library in C++11 werden zusammenfassend vorgestellt.
Jürgen Lemke

Techniken und Anwendungsfälle

Frontmatter
5. Sichere Schnittstellen (Interfaces)
Zusammenfassung
Das Design von templatebasierten Softwaresystemen setzt Schnittstellen voraus, die sicher zu verwenden und gut dokumentiert sind. Die Schnittstellen sollten sowohl hinsichtlich der Parameter, als auch der zu verwendeten Typen sicher sein. Bjarne Stroustrup beschreibt in [1] effiziente Ansätze zur Realisierung dieser Anforderungen, die in den folgenden Abschnitten weiter ausgebaut werden. Es werden Techniken vorgestellt, wie mit dem Einsatz von Templates und der Metaprogrammierung Schnittstellen zur Kompilationszeit geprüft und Fehler ausgegeben werden können.
Jürgen Lemke
6. C++-Metaprogrammierung für Strukturen
Zusammenfassung
Im folgenden Kapitel wird ein Verfahren zur Generierung von atomaren Strukturen (Strukturen, die nur Objekte atomarer Typen enthalten) und deren Verwaltungsklassen vorgestellt, die einen automatisierten Zugriff auf die Elemente der Struktur ermöglichen.
Jürgen Lemke
7. Weitere Anwendungsbeispiele für generierte Strukturen
Zusammenfassung
Die generierten Strukturen und die Typlisten nach Kap. 6 bilden die Grundlage für die weiteren Anwendungsmöglichkeiten. Im folgenden Kapitel wird zunächst gezeigt, wie die generierten Strukturen mit einer beliebigen Datenbank verbunden werden können. Danach wird die Generierung von graphischen Dialogen und deren Verknüpfung mit den Strukturen für wxWidgets (1) und Qt (2) vorgestellt. Diese zwei Anwendungsbeispiele sollen die vielfältigen Möglichkeiten in der weiteren Verwendung der generierten Strukturen aufzeigen.
Jürgen Lemke
8. Sicheres Rechnen mit Einheiten
Zusammenfassung
Das Rechnen mit physikalischen Größen erfordert eine korrekte Berücksichtigung der Einheiten. Es sollte heute mit der modernen Softwaretechnik kein Problem mehr sein, unterschiedliche Einheitensysteme zu verwenden und untereinander sicher zu konvertieren.
Jürgen Lemke
9. Speicheroptimierung mit Bitfeldern
Zusammenfassung
Das Arbeiten mit Bitfeldern zur Laufzeit der Programme ist relativ aufwendig, langsam und ineffizient. In diesem Kapitel wird gezeigt, wie mit Templates Bitfelder realisiert werden können und wie auf die einzelnen Elemente des Bitfeldes sehr effizient zugegriffen werden kann.
Jürgen Lemke
10. Metaprogrammierung mit Gleitkommazahlen
Zusammenfassung
Die Metaprogrammierung mit Gleitkommazahlen zielt sowohl auf die Berechnung von komplexen mathematischen Funktionen zur Übersetzungszeit, als auch auf die Optimierung von mathematischen Algorithmen.
Jürgen Lemke
11. Weitere Beispiele der Metaprogrammierung
Zusammenfassung
Dieses Kapitel umfasst einige Beispiele der Primzahlen- und astronomischen Zeit- und Datumsberechnung zur Übersetzungszeit. In diesen Beispielen werden nochmals einige Techniken des rekursiven Aufrufs von Klassentemplates dargestellt, sowie deren weitere Optimierung durch Verschachtelung von rekursiven Aufrufen. Die Beispiele sollen nur exemplarisch die allgemeine Herangehensweise in der Umsetzung einer Berechnung zur Übersetzungszeit beschreiben.
Jürgen Lemke
Backmatter
Metadaten
Titel
C++-Metaprogrammierung
verfasst von
Jürgen Lemke
Copyright-Jahr
2016
Verlag
Springer Berlin Heidelberg
Electronic ISBN
978-3-662-48550-7
Print ISBN
978-3-662-48549-1
DOI
https://doi.org/10.1007/978-3-662-48550-7