Ответ 1
Теперь в С++ 11 имеем
#include <string>
string s = std::to_string(123);
Ссылка на ссылку: http://en.cppreference.com/w/cpp/string/basic_string/to_string
Проблема: у меня есть целое число; это целое число нужно преобразовать в тип stl:: string.
В прошлом я использовал stringstream
для преобразования, и это просто громоздко. Я знаю, что C-способ - это сделать sprintf
, но я бы скорее сделал С++-метод, который является typafe (er).
Есть ли лучший способ сделать это?
Ниже приведен метод stringstream, который я использовал в прошлом:
std::string intToString(int i)
{
std::stringstream ss;
std::string s;
ss << i;
s = ss.str();
return s;
}
Конечно, это можно было бы переписать так:
template<class T>
std::string t_to_string(T i)
{
std::stringstream ss;
std::string s;
ss << i;
s = ss.str();
return s;
}
Однако у меня есть мнение, что это довольно "тяжелая" реализация.
Зан заметил, что вызов довольно приятный:
std::string s = t_to_string(my_integer);
Во всяком случае, лучший способ был бы... приятный.
Связанный:
Теперь в С++ 11 имеем
#include <string>
string s = std::to_string(123);
Ссылка на ссылку: http://en.cppreference.com/w/cpp/string/basic_string/to_string
Как упоминалось ранее, я бы рекомендовал увеличить lexical_cast. Мало того, что он имеет довольно хороший синтаксис:
#include <boost/lexical_cast.hpp>
std::string s = boost::lexical_cast<std::string>(i);
он также обеспечивает некоторую безопасность:
try{
std::string s = boost::lexical_cast<std::string>(i);
}catch(boost::bad_lexical_cast &){
...
}
Не действительно, в стандарте. Некоторые реализации имеют нестандартную функцию itoa(), и вы можете искать Boost lexical_cast, но если вы придерживаетесь стандарта, это довольно большой выбор между stringstream и sprintf() (snprintf(), если у вас есть).