c ++ integer-> std :: string преобразование. Простая функция?
Вопрос
Проблема: у меня есть целое число; это целое число должно быть преобразовано в тип stl :: string. Р>
В прошлом я использовал stringstream
для преобразования, и это было довольно громоздко. Я знаю, что способ C состоит в том, чтобы сделать sprintf
, но я бы предпочел сделать метод C ++, который безопасен для типов (er).
Есть ли лучший способ сделать это? Р>
Вот строковый подход, который я использовал в прошлом:
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);
В любом случае, хороший способ был бы ... хорош. Р>
Связанный:
Альтернатива itoa () для преобразования целого числа в строку C ++ ?
Решение
Теперь в C ++ 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 (), и вы можете посмотреть lexical_cast в Boost, но если вы придерживаетесь стандарта, это в значительной степени выбор между stringstream и sprintf () (snprintf (), если у вас есть). р>