c ++ Integer-> std :: string-Konvertierung. Einfache Funktion?
Frage
Problem: Ich habe eine ganze Zahl ist; diese ganze Zahl muss eine stl :: string-Typ umgewandelt werden.
In der Vergangenheit habe ich verwendet stringstream
eine Umwandlung zu tun, und das ist nur irgendwie umständlich. Ich weiß, dass der C-Weg, eine sprintf
zu tun ist, aber ich würde viel lieber tun, um ein C ++ Methode, die typsicher (er) ist.
Gibt es einen besseren Weg, dies zu tun?
Hier ist der Ansatz, den ich in string der Vergangenheit verwendet habe:
std::string intToString(int i)
{
std::stringstream ss;
std::string s;
ss << i;
s = ss.str();
return s;
}
Natürlich ist dies, wie so neu geschrieben werden:
template<class T>
std::string t_to_string(T i)
{
std::stringstream ss;
std::string s;
ss << i;
s = ss.str();
return s;
}
Allerdings habe ich die Vorstellung, dass dies eine ziemlich ist ‚schwergewichtige‘ Umsetzung.
Zan stellte fest, dass der Aufruf ziemlich nett ist, aber:
std::string s = t_to_string(my_integer);
Auf jeden Fall ein schöner Weg wäre ... schön.
Verwandte:
Alternative zu itoa () für die Ganzzahl-String C ++ Umwandeln ?
Lösung
Jetzt in C ++ 11 haben wir
#include <string>
string s = std::to_string(123);
Link zur Referenz: http://en.cppreference.com/w/cpp/string/basic_string / to_string
Andere Tipps
Wie bereits erwähnt, würde ich boost lexical_cast empfehlen. Nicht nur, dass es eine ziemlich nette Syntax:
#include <boost/lexical_cast.hpp>
std::string s = boost::lexical_cast<std::string>(i);
es bietet auch eine gewisse Sicherheit:
try{
std::string s = boost::lexical_cast<std::string>(i);
}catch(boost::bad_lexical_cast &){
...
}
Nicht wirklich, in der Norm. Einige Implementierungen haben eine Nicht-Standard-itoa () Funktion, und man konnte Boost-des lexical_cast aussehen, aber wenn Sie den Standard halten, es ist so ziemlich eine Wahl zwischen string und sprintf () (snprintf (), wenn Sie es haben).