Question

Je convertir lu ma classe de champs fonctions dans une fonction de modèle. Je cours sur le terrain pour int, unsigned int, long, et unsigned long. Tous ces utilisent la même méthode pour extraire une valeur d'un istringstream (seul le changement de types):

template <typename Value_Type>
Value_Type Extract_Value(const std::string& input_string)
{
    std::istringstream    m_string_stream;
    m_string_stream.str(input_string);
    m_string_stream.clear();
    m_string_stream >> value;
    return;
}

La partie la plus délicate est le type de bool (booléen). Il y a beaucoup de représentations textuelles pour booléenne:
0, 1, T, F, TRUE, FALSE, et toutes les combinaisons de casse insensible

Voici les questions suivantes:

  1. Qu'est-ce que le C ++ sont par exemple la norme des données valides pour extraire un bool, en utilisant l'extraction de flux opérateur?
  2. Comme booléenne peut être représenté par texte, que cela implique locales?
  3. Est-dépendante cette plate-forme?

Je voudrais simplifier mon code par ne pas écrire mon propre gestionnaire pour l'entrée bool.

J'utilise MS Visual Studio 2008 (version 9), C ++ et Windows XP et Vista.

Était-ce utile?

La solution

Les chaînes pour vrai et faux sont définis par std::numpunct::truename() et std::numpunct::falsename(). Vous pouvez obtenir le numpunct pour un flux donné avec use_facet <numpunct <char> >(stream.getloc()), si je comprends bien la documentation.

EDIT: Vous pouvez basculer si vous souhaitez utiliser "1" / ou "0" "true" / "false avec std::noboolalpha et std::boolalpha.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top