Проблема: у меня целое число; это целое число необходимо преобразовать в тип 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);
В любом случае, способ получше был бы ... приятным.
Related:
@Zan: Дурп. Это то, что я получаю за публикацию кода, который не компилировал.
Как насчет некоторых примеров из следующего: codeproject.com/KB/recipes/Tokenizer.aspx Они очень эффективны и несколько элегантны.
@Beh: Эта библиотека значительно тяжелее, чем простая t_to_string (). На самом деле это выглядит очень хорошей библиотекой, но я бы не хотел импортировать все это просто для выполнения t_to_string ().





Не совсем, в стандарте. В некоторых реализациях есть нестандартная функция itoa (), и вы можете найти lexical_cast Boost, но если вы придерживаетесь стандарта, это в значительной степени выбор между stringstream и sprintf () (snprintf (), если он у вас есть).
Хорошо, что это было исправлено, см. Ответ Шауба
Как упоминалось ранее, я бы рекомендовал увеличить 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 &){
...
}
Теперь в С ++ 11 у нас есть
#include <string>
string s = std::to_string(123);
Ссылка для справки: http://en.cppreference.com/w/cpp/string/basic_string/to_string
Очень стильно. Есть ссылка на страницу стандарта с описанием функции?
ошибки компилятора для меня - "std :: to_string: неоднозначный вызов перегруженной функции"
Я бы перефразировал это на «Ну наконец то, у нас есть ...».
В вашем примере t_to_string я не понимаю, почему требуется спецификация шаблона. Шаблонная функция может определять свой тип шаблона по типам аргументов.