Die Boost C++ Bibliotheken

Kapitel 6. Boost.LexicalCast

Boost.LexicalCast bietet einen Cast-Operator boost::lexical_cast an, mit dem Zahlen von Strings in nummerische Typen wie int oder double umgewandelt werden können – und umgekehrt. boost::lexical_cast stellt somit eine Alternative zu den seit C++11 in der Standardbibliothek verfügbaren Funktionen wie std::stoi(), std::stod() oder std::to_string() dar.

Beispiel 6.1. boost::lexical_cast in Aktion
#include <boost/lexical_cast.hpp>
#include <string>
#include <iostream>

int main()
{
  std::string s = boost::lexical_cast<std::string>(123);
  std::cout << s << '\n';
  double d = boost::lexical_cast<double>(s);
  std::cout << d << '\n';
}

Beispiel 6.1 wandelt die Ganzzahl 123 in einen String um, um sie anschließend vom String in eine Kommazahl zu konvertieren. Um wie im Beispiel den Cast-Operator boost::lexical_cast einsetzen zu können, muss die Headerdatei boost/lexical_cast.hpp eingebunden werden.

boost::lexical_cast verwendet intern Streams, um Umwandlungen durchzuführen. Deswegen können grundsätzlich nur Typen umgewandelt werden, für die die Operatoren operator<< und operator>> überladen sind. boost::lexical_cast kann jedoch für einige Typen spezialisiert sein und effizientere Typumwandlungen anbieten.

Schlägt eine Umwandlung fehl, wird eine Ausnahme vom Typ boost::bad_lexical_cast geworfen. Diese Klasse ist von std::bad_cast abgeleitet.

Beispiel 6.2. boost::bad_lexical_cast im Fehlerfall
#include <boost/lexical_cast.hpp>
#include <string>
#include <iostream>

int main()
{
  try
  {
    int i = boost::lexical_cast<int>("abc");
    std::cout << i << '\n';
  }
  catch (const boost::bad_lexical_cast &e)
  {
    std::cerr << e.what() << '\n';
  }
}

Beispiel 6.2 wirft eine Ausnahme, weil der String abc nicht in eine Zahl vom Typ int umgewandelt werden kann.