Pergunta

Problema: Eu tenho um inteiro; Este inteiro precisa ser convertido em um tipo STL :: string.

No passado, eu usei stringstream fazer uma conversão, e isso é apenas uma espécie de complicado. Eu sei o caminho C é fazer uma sprintf, mas eu prefiro fazer um método C ++ que é typesafe (er).

Existe uma maneira melhor de fazer isso?

Aqui é a abordagem stringstream Eu tenho usado no passado:

std::string intToString(int i)
{
    std::stringstream ss;
    std::string s;
    ss << i;
    s = ss.str();

    return s;
}

Claro, isso poderia ser reescrito assim:

template<class T>
std::string t_to_string(T i)
{
    std::stringstream ss;
    std::string s;
    ss << i;
    s = ss.str();

    return s;
}

No entanto, tenho a noção de que esta é uma aplicação bastante 'peso-pesado'.

Zan observou que a invocação é muito bom, no entanto:

std::string s = t_to_string(my_integer);

De qualquer forma, uma maneira mais agradável seria ... agradável.

relacionadas:

Alternativa para itoa () para converter inteiro para string C ++ ?

Foi útil?

Solução

Agora, em c ++ 11 temos

#include <string>
string s = std::to_string(123);

Link para referência: http://en.cppreference.com/w/cpp/string/basic_string / to_string

Outras dicas

Como mencionado anteriormente, eu recomendo impulso lexical_cast. Não só tem uma sintaxe bastante agradável:

#include <boost/lexical_cast.hpp>
std::string s = boost::lexical_cast<std::string>(i);

também fornece alguma segurança:

try{
  std::string s = boost::lexical_cast<std::string>(i);
}catch(boost::bad_lexical_cast &){
 ...
}

Nem por isso, no padrão. Algumas implementações têm uma função itoa fora do padrão (), e você pode olhar para cima lexical_cast do Boost, mas se você ficar com o padrão é praticamente uma escolha entre stringstream e sprintf () (snprintf () se você tem isso).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top