boost

eine Übersicht

übersicht

Bei der Programmiersprache C++ ist nur die Sprache an sich und ein minimum an unstützenden Hilfsmittel standartisiert. Die mitgelieferten Bibliotheken sind für die tägliche Arbeit oft nicht ausreichend. Man muss an vielen Stellen immer wieder den gleichen Code schreiben oder hat nicht die benötigte Unterstützung durch die Sprache und ihren Bibliotheken. Hier bieten andere Programmiersprachen mehr.

Mit Hilfe von boost habe ich für mich die Standart Bibliotheken aufgestockt. Ich verwende boost in allen Projekten, so als würde es zum Compiler bzw. zur Standartbibliothek gehören.

Boost ist eine Sammlung von (C++-) Bibliotheken für verschiedene Programmierprobleme. Die meisten der Bibliotheken sind kompett im Header implementiert. Hier reicht es den Include-Pfad zum aktuellen Projekt hinzuzufügen. Manche Bibliotheken benötigen passende Lib-Dateien, welche vorher erzeugt werden müssen.

Hier folgt eine kurze Beschreibung der (für mich) wichtigsen Teile.

Eine typischen Einstieg in die Verwendung der boost-Bibliothek geschieht über die Verwendung der boost-Smart-Pointer. Einer der Smart-Pointer wird sich in der nächsten Version des C++-Standarts wieder finden.

boost::optional

Fasst in ein Objekt einen Wert und seine Gültigkeit zusammen. Damit kann ein Objekt einen gültigen Wert besitzen oder definiert ungültig sein.

Diese Klasse wird in erster Linie als Typ für Funktionsrückgaben eingesetzt.

Der Wert und der Fehlerstatus werden in einem Objekt zusammen gefasst. (Vgl. mit einem String-Objekt, das Buffer, aktuelle Länge und Buffergröße als ein Objekt zusammenfasst.) Die Syntax entspricht der Pointer-Rückgabe.

Beispiel Code…

Man boost::option ebenfalls verwenden, um nicht initialisiert Variablen zu kennzeichnen.

lexical_cast / numeric_cast

Hiermit können sehr einfach Strings in numerische Werte und umgekehrt konvertiert werden. Die Syntax ist sehr einfach und klar.

Alternative Konvertierroutinen zu atoi und sscanf

nocopy

Verhindert ein versehendliches kopieren eines Objektes, das nicht dafür ausgelegt wurde dass es kopiert werden soll.

Warum sollte ein Objekt nicht kopiert werden sollen?
Wenn das Objekt z.B. interne Daten dynamisch verwaltet - also einen Zeiger auf Daten hält, der von diesem Objekt auch wieder freigegeben wird, muss Code programmiert werden, der das richtige Verhalten bei einer Kopie sicher stellt. Ein automatisch Kopie würde nur den Zeiger auf Daten und nicht die Daten kopieren. Diesen zusätzlichen Code kann man sich in vielen Fällen sparen. Dann muss man sicher stellen, dass nicht ausversehen eine Kopie angelegt wird.

Auch bei großen Objekten kann eine nicht beabsichtigte Kopie unerwünscht sein.

Wann würde eine automatische Kopie angelegt werden?
Der Compiler generiert automatisch einen Kopier-Consturktor und einen Zuweisungsoperator. Diese können nur dumme (binaere) Kopien der Objekt erzeugen. -Bei der Zuweisung - Initialisierungen - Wenn die echten Objekte als Parameter übergeben werden. Werden die Objekte als Referenzen oder Zeiger übergeben werden keine Kopien angelegt.

static_assert

Stellt bereits zur Compile-Zeit sicher, dass gewisse Annahmen zutreffen.

array

Ein Feld fester größe, das sich STL konform verhält.

format

Typsichere Format operationen.

Für viele Programmierer ist die neue Syntax für Ausgaben und Formatierungen mit den streams gewöhnungsbedürftig. Wenn die Ausgabe dann noch Formatiert werden soll z.B. eine Fließkommazahl mit 3 Nachkomma stellen, dass wird es ekelig.

Daher verwenden immer noch einige C++-Programmierer die Ausgabe und Formatierungsfunktionen von C (also printf, scanf,...). Diese Routinen sind jedoch mit vielen Problembehaftet. Z.B. kein Schutz gegen Bufferoverruns, etc.

Format bietet hier eine typsichere Alternative mit bekannter Syntax.