77 votes

std :: lexical_cast - existe-t-il une telle chose?

La bibliothèque standard C ++ définit-elle cette fonction ou dois-je recourir à Boost?

J'ai cherché sur le Web et je n'ai rien trouvé à part Boost, mais j'ai pensé que je ferais mieux de demander ici.

93voto

Lightness Races in Orbit Points 122793

En partie seulement.

C++11 <string> a std::to_string pour les types intégrés:

[n3290: 21.5/7]:

string to_string(int val);
string to_string(unsigned val);
string to_string(long val);
string to_string(unsigned long val);
string to_string(long long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string(long double val);

Retourne: Chaque fonction renvoie un string objet la tenue de la caractère de la représentation de la valeur de son argument qui serait être générée par l'appel de sprintf(buf, fmt, val) avec un format spécificateur de "%d", "%u", "%ld", "%lu", "%lld", "%llu", "%f", "%f"ou "%Lf", respectivement, où bufdésigne un caractère interne de la mémoire tampon de taille suffisante.

Il y a également les éléments suivants qui vont dans l'autre sens:

[n3290: 21.5/1, 21.5/4]:

int stoi(const string& str, size_t *idx = 0, int base = 10);
long stol(const string& str, size_t *idx = 0, int base = 10);
unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);
long long stoll(const string& str, size_t *idx = 0, int base = 10);
unsigned long long stoull(const string& str, size_t *idx = 0, int base = 10);
float stof(const string& str, size_t *idx = 0);
double stod(const string& str, size_t *idx = 0);
long double stold(const string& str, size_t *idx = 0);

Cependant, il n'y a rien de générique que vous pouvez utiliser (au moins pas jusqu'à ce que TR2, peut-être!), et rien du tout en C++03.

19voto

CharlesB Points 27070

Non, même en C ++ 11, mais il est proposé de l'inclure dans le rapport technique 2, le prochain jeu d'extensions de bibliothèque std.

11voto

luke Points 16255

Il n'y a pas de std :: lexical_cast, mais vous pouvez toujours faire quelque chose de similaire avec stringstreams :

 template <typename T>
T lexical_cast(const std::string& str)
{
    T var;
    std::istringstream iss;
    iss.str(str);
    iss >> var;
    // deal with any error bits that may have been set on the stream
    return var;
}
 

6voto

Joachim Pileborg Points 121221

Non, c'est uniquement du pur Boost.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X