Подтвердить что ты не робот

С++ integer → std::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);

Во всяком случае, лучший способ был бы... приятный.

Связанный:

Альтернатива itoa() для преобразования целого в строку С++?

4b9b3361

Ответ 2

Как упоминалось ранее, я бы рекомендовал увеличить 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 &){
 ...
}

Ответ 3

Не действительно, в стандарте. Некоторые реализации имеют нестандартную функцию itoa(), и вы можете искать Boost lexical_cast, но если вы придерживаетесь стандарта, это довольно большой выбор между stringstream и sprintf() (snprintf(), если у вас есть).