std:: num_get
|
Défini dans l'en-tête
<locale>
|
||
|
template
<
class
CharT,
|
||
La classe
std::num_get
encapsule les règles d'analyse des représentations textuelles des valeurs numériques. Plus précisément, les types
bool
,
unsigned
short
,
unsigned
int
,
long
,
unsigned
long
,
long
long
,
unsigned
long
long
(depuis C++11)
,
float
,
double
,
long
double
, et
void
*
sont pris en charge. Les opérateurs d'entrée de formatage standard (tels que
cin
>>
n
;
) utilisent le facet
std::num_get
des paramètres régionaux du flux d'E/S pour analyser les représentations textuelles des nombres.
Diagramme d'héritage
Si une spécialisation de
std::num_get
n'est pas garantie d'être fournie par la bibliothèque standard (voir ci-dessous), les comportements de ses fonctions
get()
et
do_get()
ne sont pas garantis comme spécifié.
Table des matières |
Spécialisations
La bibliothèque standard garantit la fourniture des spécialisations suivantes (elles sont requises pour être implémentées par tout objet locale ):
|
Défini dans l'en-tête
<locale>
|
|
| std :: num_get < char > | crée l'analyse de chaînes étroites pour les nombres |
| std :: num_get < wchar_t > | crée l'analyse de chaînes larges pour les nombres |
En outre, la bibliothèque standard garantit également de fournir chaque spécialisation qui satisfait aux exigences de type suivantes :
-
CharTest l'un des- char ,
- wchar_t , et
- tout autre type de conteneur de caractères défini par l'implémentation qui satisfait aux exigences pour un caractère sur lequel l'un des composants iostream peut être instancié ; et
-
InputItdoit satisfaire aux exigences de LegacyInputIterator .
Types imbriqués
| Type | Définition |
char_type
|
CharT
|
iter_type
|
InputIt
|
Membres de données
| Membre | Description |
std::locale::id
id
[static]
|
l'identifiant de la facette |
Fonctions membres
construit un nouveau facet
num_get
(fonction membre publique) |
|
invoque
do_get
(fonction membre publique) |
Fonctions membres protégées
détruit un facet
num_get
(fonction membre protégée) |
|
|
[virtual]
|
analyse un nombre depuis un flux d'entrée
(fonction membre virtuelle protégée) |
Exemple
#include <iostream> #include <iterator> #include <locale> #include <sstream> #include <string> int main() { std::string de_double = "1.234.567,89"; std::string us_double = "1,234,567.89"; // analyse en utilisant les flux std::istringstream de_in(de_double); de_in.imbue(std::locale("de_DE.UTF-8")); double f1; de_in >> f1; std::istringstream us_in(de_double); us_in.imbue(std::locale("en_US.UTF-8")); double f2; us_in >> f2; std::cout << "L'analyse de " << de_double << " en tant que double donne " << std::fixed << f1 << " dans la locale de_DE et " << f2 << " dans en_US\n"; // utiliser directement le facet std::istringstream s3(us_double); s3.imbue(std::locale("en_US.UTF-8")); auto& f = std::use_facet<std::num_get<char>>(s3.getloc()); std::istreambuf_iterator<char> beg(s3), end; double f3; std::ios::iostate err; f.get(beg, end, s3, err, f3); std::cout << "l'analyse de " << us_double << " en tant que double en utilisant directement le facet en_US donne " << f3 << '\n'; }
Sortie :
L'analyse de 1.234.567,89 en tant que double donne 1234567.890000 dans la locale de_DE et 1.234000 dans en_US l'analyse de 1,234,567.89 en tant que double en utilisant directement le facet en_US donne 1234567.890000
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 427 | C++98 |
num_get
était garanti d'accepter tout
CharT
qui
répond aux exigences pour un caractère sur lequel n'importe quel composant des iostreams peut être instancié |
garantit uniquement d'accepter
char
,
wchar_t et autres types de caractères définis par l'implémentation |
| LWG 2392 | C++98 |
seul le type de caractère
CharT
pouvait être
garanti d'être accepté par
num_get
|
peut garantir d'accepter les types de conteneurs
de caractères définis par l'implémentation |
Voir aussi
|
définit les règles de ponctuation numérique
(modèle de classe) |
|
|
formate les valeurs numériques pour la sortie sous forme de séquence de caractères
(modèle de classe) |
|
|
extrait des données formatées
(fonction membre publique de
std::basic_istream<CharT,Traits>
)
|