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.
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.
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.