Domanda

Problema: ho un numero intero; questo numero intero deve essere convertito in un tipo stl :: string.

In passato, ho usato stringstream per fare una conversione, ed è un po 'ingombrante. So che il modo C è fare un sprintf , ma preferirei piuttosto un metodo C ++ che sia typesafe (er).

C'è un modo migliore per farlo?

Ecco l'approccio stringstream che ho usato in passato:

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

    return s;
}

Naturalmente, questo potrebbe essere riscritto in questo modo:

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

    return s;
}

Tuttavia, ho l'idea che si tratti di un'implementazione abbastanza "pesante".

Zan ha notato che l'invocazione è piuttosto carina, tuttavia:

std::string s = t_to_string(my_integer);

Ad ogni modo, un modo migliore sarebbe ... carino.

  

Related:

     

Alternativa a itoa () per convertire numeri interi in stringhe C ++ ?

È stato utile?

Soluzione

Ora in c ++ 11 abbiamo

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

Link al riferimento: http://en.cppreference.com/w/cpp/string/basic_string / to_string

Altri suggerimenti

Come accennato in precedenza, consiglierei di aumentare lexical_cast. Non solo ha una sintassi abbastanza buona:

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

fornisce anche un po 'di sicurezza:

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

Non proprio, nello standard. Alcune implementazioni hanno una funzione itoa () non standard e potresti cercare il lexical_cast di Boost, ma se ti attieni allo standard è praticamente una scelta tra stringstream e sprintf () (snprintf () se ce l'hai).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top