C++ Nachbrenner

Martin Kompf

Die Boost C++ Libraries bieten nützliche und hochqualitative Erweiterungen für C++.

C++ stellt zusammen mit der Standard Template Library (STL) ein mächtiges und universelles Programmierwerkzeug dar. Einsteiger in die C++ Programmierung vermissen allerdings oftmals wichtige Basisfunktionen, wie zum Beispiel die Unterstützung von regulären Ausdrücken oder Multithreading. Vom darauf angesprochenen Experten bekommt man dann die Antwort, dass es dafür schließlich Libraries (deutsch: Bibliotheken) gibt, welche die benötigte Funktionalität zur Verfügung stellen.

Zeitaufwendige Suche

Die Suche nach einer solchen speziellen Library im Internet kann allerdings schnell zur Sisyphusarbeit ausarten. Insbesondere um die Qualität der Implementierung und die Unterstützung eines bestimmten Compilers zu beurteilen, kommt man um zeitaufwendige Tests oft nicht herum.

An dieser Stelle setzt das Boost Projekt an. Eine Gruppe von Entwicklern hat sich hier das Ziel gesetzt, hochqualitative Libraries für die verschiedensten Einsatzzwecke zu entwickeln und frei verfügbar zu machen. Die Liste der bisher fertiggestellten Lösungen ist beeindruckend: So gibt es Libraries für Textverarbeitung, Numerik, Speichermanagement und Multihtreading sowie diverse Erweiterungen der STL um zusätzliche Container, Iteratoren, Algorithmen und Funktionsobjekte.

Beeindruckende Liste

Als Beispiele aus der Kategorie Textverarbeitung seien hier die Libraries regex, welche bereits in einem früheren Artikel vorgestellt wurde, und conversion/lexical_cast genannt. Mit conversion/lexical_cast lässt sich das immer wieder auftretende Problem, numerische Daten und Zeichenketten untereinander zu konvertieren, elegant lösen, wie das nachfolgende Beispiel zeigt:

// Kommandozeilenargumente werden in numerische Daten umgewandelt:
int main(int argc, char * argv[])
{
  using boost::lexical_cast;
  using boost::bad_lexical_cast;

  std::vector<short> args;

  while(*++argv) {
      try {
          args.push_back(lexical_cast<short>(*argv));
      }
      catch(bad_lexical_cast &) {
          args.push_back(0);
      }
  }
  //...
}

// Numerische Daten werden in einem String-Ausdruck benutzt:
  void log_message(const std::string &);

  void log_error(int errnum) {
      log_message("Error "
        + boost::lexical_cast<std::string>(errnum)
        + ": " + strerror(errnum));
  }

Fazit: Ein Besuch von boost.org lohnt sich in jedem Fall, wenn man auf der Suche nach Lösungen für häufig vorkommende Aufgabenstellungen, wie der Verarbeitung von Zeichenketten, dem Erzeugen von Zufallszahlen, der Verwendung von smart Pointers, Zeitmessungen oder Multithreading ist.