Die Boost C++ Bibliotheken

Überblick

Es existieren mehr als 100 Boost-Bibliotheken. In diesem Buch werden Ihnen folgende vorgestellt:

Tabelle 1. Vorgestellte Bibliotheken
Boost-Bibliothek Standard Kurzbeschreibung
Boost.Accumulators Boost.Accumulators bietet Akkumulatoren an, denen Zahlen hinzugefügt werden können, um zum Beispiel den Durchschnittswert oder die Standardabweichung zu erhalten.
Boost.Algorithm Boost.Algorithm bietet verschiedene Algorithmen an, die die Algorithmen der Standardbibliothek ergänzen.
Boost.Any Boost.Any stellt mit boost::any eine Klasse zur Verfügung, die Daten beliebiger Typen speichern kann.
Boost.Array TR1, C++11 Boost.Array ermöglicht es, ein herkömmliches Array wie einen echten Container zu behandeln.
Boost.Asio Mit Boost.Asio können Programme entwickelt werden, die Daten asynchron verarbeiten – zum Beispiel Netzwerkanwendungen.
Boost.Assign Boost.Assign bietet Hilfsfunktionen an, um mehrere Werte in einem Container speichern zu können, ohne wiederholt Methoden wie push_back() aufrufen zu müssen.
Boost.Atomic C++11 Boost.Atomic bietet mit boost::atomic eine Klasse an, um in Multithreaded-Anwendungen atomare Operationen auf integrale Typen anwenden zu können.
Boost.Bimap Boost.Bimap stellt eine Klasse boost::bimap zur Verfügung, die ähnlich funktioniert wie std::map. Der entscheidende Unterschied ist, dass bei boost::bimap sowohl nach Schlüsseln als auch nach Werten gesucht werden kann.
Boost.Bind TR1, C++11 Boost.Bind ist eine Art Adapter, der ermöglicht, Funktionen als Template-Parameter zu übergeben, selbst wenn der Funktionskopf mit dem vom Template erwarteten Parameter inkompatibel ist.
Boost.Chrono C++11 Boost.Chrono bietet zahlreiche Uhren an, um zum Beispiel die aktuelle Uhrzeit zu erhalten oder die CPU-Zeit zu ermitteln.
Boost.CircularBuffer Boost.CircularBuffer stellt einen ringförmigen Container mit einer konstanten Speichergröße zur Verfügung.
Boost.CompressedPair Boost.CompressedPair bietet mit boost::compressed_pair eine Datenstruktur an, die std::pair ähnelt, jedoch weniger Speicherplatz benötigt, wenn Template-Parameter leere Klassen sind.
Boost.Container Boost.Container stellt alle Container aus der Standardbibliothek zur Verfügung. Darüber hinaus werden von dieser Bibliothek weitere Container wie boost::container::slist angeboten.
Boost.Conversion Boost.Conversion bietet zwei Cast-Operatoren an, um Down- und Crosscasts durchzuführen.
Boost.Coroutine Boost.Coroutine macht es möglich, Coroutinen, wie sie in anderen Programmiersprachen häufig mit dem Schlüsselwort yield in Verbindung gebracht werden, in C++ zu nutzen.
Boost.DateTime Boost.DateTime kann verwendet werden, wenn Datumsangaben und Uhrzeiten verarbeitet und flexibel formatiert ein- und ausgegeben werden sollen.
Boost.DynamicBitset Boost.DynamicBitset stellt eine Datenstruktur zur Verfügung, die grundsätzlich genauso funktioniert wie std::bitset, jedoch zur Laufzeit konfiguriert wird.
Boost.EnableIf C++11 Boost.EnableIf macht es möglich, Funktionen basierend auf Typ-Eigenschaften zu überladen.
Boost.Exception Boost.Exception ermöglicht es, einer geworfenen Ausnahme zusätzliche Daten hinzuzufügen, um in catch-Handlern mehr Informationen zur Verfügung zu haben.
Boost.Filesystem Boost.Filesystem bietet eine Klasse zum Verarbeiten von Pfadangaben und zahlreiche Funktionen an, um auf Dateien und Verzeichnisse zuzugreifen.
Boost.Flyweight Boost.Flyweight macht es einfach, das gleichnamige Entwurfsmuster einzusetzen – auf Deutsch Fliegengewicht.
Boost.Foreach Boost.Foreach stellt ein Makro zur Verfügung, das ähnlich wie die range-basierte for-Schleife in C++11 funktioniert.
Boost.Format Boost.Format ersetzt std::printf() durch eine typsichere und erweiterbare Klasse boost::format.
Boost.Function TR1, C++11 Boost.Function vereinfacht die Definition von Funktionszeigern.
Boost.Fusion Boost.Fusion erlaubt es, heterogene Container zu erstellen – Container, die Werte unterschiedlicher Typen speichern.
Boost.Graph Boost.Graph bietet Algorithmen an, um in einem Graphen beispielsweise den kürzesten Weg zwischen zwei Punkten zu finden.
Boost.Heap Boost.Heap bietet zahlreiche Varianten der aus der Standardbibliothek bekannten Klasse std::priority_queue an.
Boost.Integer C++11 Boost.Integer bietet spezialisierte Typen für Ganzzahlen an, wie sie C-Entwicklern seit dem im Jahr 1999 verabschiedeten Standard C99 zur Verfügung stehen.
Boost.Interprocess Boost.Interprocess gestattet Prozessen, schnell und effizient über gemeinsam genutzte Speicherbereiche zu kommunizieren.
Boost.Intrusive Boost.Intrusive stellt Container zur Verfügung, die eine höhere Performance als Container aus der Standardbibliothek bieten können. Sie stellen jedoch besondere Anforderungen an Daten, die in ihnen gespeichert werden sollen.
Boost.IOStreams Boost.IOStreams bietet Streams und Filter an. So kann ein Stream mit einem Filter verbunden werden, um zum Beispiel Daten, die in den Stream geschrieben werden, zu komprimieren.
Boost.Lambda Boost.Lambda ermöglicht die Definition anonymer Funktionen – also Funktionen ohne Namen – auch ohne C++11.
Boost.LexicalCast Boost.LexicalCast bietet einen Cast-Operator, mit dem Zahlen in einen String und zurück umgewandelt werden können.
Boost.Lockfree Boost.Lockfree bietet thread-safe Container an. Auf Container dieser Bibliothek darf von mehreren Threads aus gleichzeitig zugegriffen werden.
Boost.Log Boost.Log ist die Logging-Bibliothek in Boost.
Boost.MinMax C++11 Boost.MinMax stellt einen Algorithmus zur Verfügung, mit dem das kleinste und größte Element in einem Container gefunden werden kann, ohne zwei Funktionsaufrufe – nämlich für std::min() und std::max() – machen zu müssen.
Boost.MPI Boost.MPI bietet eine C++-Schnittstelle für den MPI-Standard an.
Boost.MetaStateMachine Boost.MetaStateMachine macht es möglich, Zustandsautomaten zu entwickeln, wie sie in der UML definiert sind.
Boost.MultiArray Boost.MultiArray erleichtert den Umgang mit mehrdimensionalen Arrays.
Boost.MultiIndex Mit Boost.MultiIndex können neue Container definiert werden, die gleichzeitig mehrere Schnittstellen wie beispielsweise die von std::vector und std::map unterstützen.
Boost.NumericConversion Boost.NumericConversion bietet einen Cast-Operator an, der Zahlen zwischen Typen unterschiedlicher Bandbreite sicher konvertiert, ohne dass es einen unbemerkten Überlauf geben kann.
Boost.Operators Mit Boost.Operators können Operatoren automatisch basierend auf anderen bereits definierten Operatoren definiert werden.
Boost.Optional Boost.Optional bietet eine Klasse an, mit der optionale Rückgabewerte gekennzeichnet werden können. Funktionen, die nicht immer ein Ergebnis zurückgeben können, müssen dann nicht auf spezielle Werte wie -1 oder einen Nullzeiger zugreifen, um anzugeben, dass kein Ergebnis vorliegt.
Boost.Parameter Boost.Parameter erlaubt es, Parameter an Funktionen als Name/Wert-Paar zu übergeben, wie es zum Beispiel die Programmiersprache Python ermöglicht.
Boost.Phoenix Boost.Phoenix macht es möglich, ohne C++11 Lambda-Funktionen zu erstellen. Im Gegensatz zu C++11-Lambda-Funktionen sind die mit dieser Bibliothek erstellten Lambda-Funktion generisch – etwas, was in C++ erst seit C++14 unterstützt wird.
Boost.PointerContainer Boost.PointerContainer bietet Container an, die für die Verwaltung dynamisch reservierter Objekte optimiert sind.
Boost.Pool Boost.Pool ist eine Bibliothek zur Verwaltung von Speicher. So bietet Boost.Pool beispielsweise einen Allokator, der Speicher unter Umständen schneller zur Verfügung stellen kann als der Standardallokator.
Boost.ProgramOptions Boost.ProgramOptions erlaubt es einer Anwendung, Kommandozeilenparameter zu definieren und auszuwerten.
Boost.PropertyTree Boost.PropertyTree stellt einen Container zur Verfügung, in dem Schlüssel/Wert-Paare in einer Baumstruktur gespeichert werden. Auf diese Weise sollen Konfigurationsdaten, wie sie in vielen Anwendungen verwendet werden, einfach verwaltet werden können.
Boost.Random TR1, C++11 Boost.Random stellt Generatoren für Zufallszahlen zur Verfügung.
Boost.Range Boost.Range führt mit der Range ein Konzept ein, das die Iteratoren ersetzt, die üblicherweise von Containern über begin() und end() erhalten und als Paar an Algorithmen übergeben werden müssen.
Boost.Ref TR1, C++11 Die Adapter von Boost.Ref ermöglichen es, Referenzen auf Objekte, die nicht kopiert werden können oder sollen, an Funktionen zu übergeben, die Kopien erwarten.
Boost.Regex TR1, C++11 Boost.Regex bietet Funktionen an, um Strings mit Hilfe regulärer Ausdrücke zu durchsuchen.
Boost.ScopeExit Boost.ScopeExit bietet Makros an, um Code-Blöcke zu definieren, die ausgeführt werden, wenn der aktuelle Gültigkeitsbereich endet. So kann sichergestellt werden, dass Ressourcen am Ende eines Gültigkeitsbereichs freigegeben werden, ohne auf Smartpointer oder andere Klassen zugreifen zu müssen.
Boost.Serialization Mit Boost.Serialization können Objekte serialisiert und in Dateien gespeichert und später wieder von ihnen geladen werden.
Boost.Signals2 Boost.Signals2 ist ein Framework zur Ereignisverarbeitung. Es setzt das Signal-Slot-Konzept um: Funktionen werden mit Signalen verbunden und automatisch aufgerufen, wenn Signale ausgelöst werden.
Boost.SmartPoiners TR1, C++11 Boost.SmartPointers bietet zahlreiche Smartpointer an, die die Verwaltung von dynamisch reservierten Objekten vereinfachen.
Boost.Spirit Boost.Spirit ermöglicht es, Parser zu generieren, indem Regeln in einer Syntax niedergeschrieben werden, die der EBNF (Erweiterte Backus-Naur-Form) ähnelt.
Boost.StringAlgorithms In der Bibliothek Boost.StringAlgorithms stehen zahlreiche freistehende Funktionen zur Verfügung, die es einfacher machen, Strings zu verarbeiten.
Boost.Swap Boost.Swap bietet mit boost::swap() einen Algorithmus an, der sich so verhält wie std::swap(), jedoch für viele Boost-Bibliotheken optimiert ist.
Boost.System C++11 Boost.System stellt ein Framework zur Verfügung, um system- und anwendungsspezifische Fehlercodes zu verarbeiten.
Boost.Thread C++11 Boost.Thread ermöglicht es, Multithreaded-Programme zu entwickeln.
Boost.Timer Boost.Timer bietet Uhren an, um die Ausführungsgeschwindigkeit von Code zu messen.
Boost.Tokenizer Mit Boost.Tokenizer kann über einzelne Bestandteile eines Strings iteriert werden.
Boost.Tribool Boost.Tribool bietet einen Typ an, der nicht wie bool zwei, sondern drei Status kennt.
Boost.Tuple TR1, C++11 Boost.Tuple bietet eine verallgemeinerte Version von std::pair an. So können in der von Boost.Tuple zur Verfügung gestellten Klasse nicht nur zwei, sondern beliebig viele Werte gruppiert werden.
Boost.TypeTraits TR1, C++11 Boost.TypeTraits bietet Funktionen an, um Typen auf Eigenschaften zu überprüfen.
Boost.Unordered TR1, C++11 Boost.Unordered bietet mit boost::unordered_set und boost::unordered_map zwei Hash-Container an.
Boost.Utility Boost.Utility ist ein Sammelsurium verschiedener Hilfsmittel, die jeweils zu klein sind, um in ihrer eigenen Bibliothek gepflegt zu werden. Was keine eigene Bibliothek rechtfertigt und nicht in andere Bibliotheken passt, wird in Boost.Utility abgelegt.
Boost.Uuid Boost.Uuid bietet eine Klasse boost::uuids::uuid und Generatoren zur Erzeugung von UUIDs an.
Boost.Variant Boost.Variant ermöglicht die Definition von Typen, die ähnlich wie union mehrere Typen gruppieren. Der Vorteil von Boost.Variant ist, dass in dieser Gruppe beliebige Klassen verwendet werden können.
Boost.Xpressive Boost.Xpressive ermöglicht es, reguläre Ausdrücke auf Strings anzuwenden. Reguläre Ausdrücke werden nicht als Strings angegeben, sondern als C++-Code.

Die voraussichtlich nächste Version des Standards wird C++17 sein. Rund um C++17 existieren zahlreiche auf bestimmte Themenblöcke spezialisierte Projektgruppen. Diese sind als Technische Spezifikationen bekannt – kurz TS. In der File System TS wird zum Beispiel basierend auf Boost.Filesystem über eine Erweiterung des Standards zum Zugriff auf Dateien und Verzeichnisse nachgedacht. Weitere Informationen zu C++17 und dem Standardisierungsprozess zu C++ finden Sie unter isocpp.org.