num_get, classe
Modèle de classe qui décrit un objet qui peut servir de facette de paramètres régionaux pour contrôler les conversions de séquences de type CharType
en valeurs numériques.
Syntaxe
template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class num_get : public locale::facet;
Paramètres
CharType
Type utilisé dans un programme pour encoder des caractères dans des paramètres régionaux spécifiques.
InputIterator
Type d'itérateur depuis lequel les fonctions get numériques lisent leur entrée.
Notes
Comme avec n'importe quelle facette de paramètres régionaux, l'ID d'objet statique possède une valeur stockée initiale de zéro. La première tentative d’accès à sa valeur stockée entraîne le stockage d’une valeur positive unique dans id.
Constructeurs
Constructeur | Description |
---|---|
num_get | Constructeur des objets de type num_get utilisés pour extraire des valeurs numériques depuis des séquences. |
Typedefs
Nom de type | Description |
---|---|
char_type | Type utilisé pour décrire un caractère utilisé par des paramètres régionaux. |
iter_type | Type qui décrit un itérateur d'entrée. |
Fonctions Membre
Fonction membre | Description |
---|---|
do_get | Fonction virtuelle appelée pour extraire une valeur numérique ou booléenne depuis une séquence de caractères. |
get | Extrait une valeur numérique ou booléenne d'une séquence de caractères. |
Spécifications
Header :<locale>
Espace de noms : std
num_get ::char_type
Type utilisé pour décrire un caractère utilisé par des paramètres régionaux.
typedef CharType char_type;
Notes
Le type est un synonyme du paramètre de modèle CharType.
num_get ::d o_get
Fonction virtuelle appelée pour extraire une valeur numérique ou booléenne depuis une séquence de caractères.
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned short& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned int& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
Paramètres
first
Début de la plage de caractères à partir de laquelle lire le nombre.
last
Fin de la plage de caractères à partir de laquelle lire le nombre.
iosbase
ios_base dont les indicateurs sont utilisés par la conversion.
state
État auquel failbit (voir ios_base::iostate) est ajouté en cas d’échec.
val
Valeur qui a été lue.
Valeur de retour
Itérateur une fois que la valeur a été lue.
Notes
La première fonction membre protégée virtuelle,
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
correspond aux éléments séquentiels commençant d’abord dans la séquence [first, last)
jusqu’à ce qu’il ait reconnu un champ d’entrée entier complet et sansmpty. Si elle réussit, elle convertit ce champ en sa valeur équivalente en tant que type long
et stocke le résultat en val. Elle retourne un itérateur désignant le premier élément au-delà du champ d’entrée numérique. Sinon, la fonction ne stocke rien dans val et se définit ios_base::failbit
dans state
. Elle retourne un itérateur désignant le premier élément au-delà de tout préfixe d’un champ d’entrée d’entier valide. Dans les deux cas, si la valeur de retour est égale à last
, la fonction définit ios_base::eofbit
dans state
.
Le champ d’entrée d’entier est converti d’après les mêmes règles que celles utilisées par les fonctions d’analyse pour la mise en correspondance et la conversion d’une série d’éléments char
d’un fichier. (Chaque élément de ce char
type est supposé mapper à un élément de type Elem
équivalent par un mappage simple, un-à-un.) La spécification de conversion d’analyse équivalente est déterminée comme suit :
Si iosbase.
ios_base::flags() & ios_base::basefield == ios_base::
oct, la spécification de conversion est lo
.
Si iosbase.flags() & ios_base::basefield == ios_base::
hex, la spécification de conversion est lx
.
Si iosbase.flags() & ios_base::basefield == 0
, la spécification de conversion est li
.
Autrement, la spécification de conversion est ld
.
Le format d’un champ d’entrée entier est déterminé par la facettefac
de paramètres régionaux retournée par l’appel use_facet <
numpunct<Elem>(iosbase.
ios_base ::getloc.())
Plus précisément :
fac.
numpunct::grouping()
détermine comment les chiffres sont regroupés à gauche de la virgule décimale.
fac.
numpunct::thousands_sep()
détermine la séquence qui sépare les groupes de chiffres à gauche de la virgule décimale.
Si aucune instance de fac.thousands_sep()
ne se produit dans le champ d’entrée numérique, aucune contrainte de regroupement n’est imposée. Autrement, toute contrainte de regroupement imposée par fac.grouping()
est appliquée, et les séparateurs sont supprimés avant que la conversion d’analyse ait lieu.
La quatrième fonction membre protégée virtuelle :
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
Se comporte comme la première, sauf qu’elle remplace une spécification de conversion de ld
par lu
. Si elle réussit, elle convertit le champ d’entrée numérique en valeur de type unsigned long
et stocke cette valeur dans val.
La cinquième fonction membre protégée virtuelle :
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
Se comporte comme la première, sauf qu’elle remplace une spécification de conversion de ld
par lld
. Si elle réussit, elle convertit le champ d’entrée numérique en valeur de type long long
et stocke cette valeur dans val.
La sixième fonction membre protégée virtuelle :
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
Se comporte comme la première, sauf qu’elle remplace une spécification de conversion de ld
par llu
. Si elle réussit, elle convertit le champ d’entrée numérique en valeur de type unsigned long long
et stocke cette valeur dans val.
La septième fonction membre protégée virtuelle :
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
Se comporte comme la première, sauf qu’elle essaie de mettre en correspondance un champ d’entrée à virgule flottante complet et non vide. fac.
numpunct::decimal_point()
détermine la séquence qui sépare les chiffres entiers des chiffres de fraction. Le spécificateur de conversion d’analyse équivalent est lf
.
La huitième fonction membre protégée virtuelle :
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
Se comporte comme la première, sauf qu’elle essaie de mettre en correspondance un champ d’entrée à virgule flottante complet et non vide. fac.
numpunct::decimal_point()
détermine la séquence qui sépare les chiffres entiers des chiffres de fraction. Le spécificateur de conversion d’analyse équivalent est lf
.
La neuvième fonction membre protégée virtuelle :
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
Se comporte comme la huitième, sauf que le spécificateur de conversion d’analyse équivalent est Lf
.
Dixième fonction membre protégée virtuelle :
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
Se comporte comme la première, sauf que le spécificateur de conversion d’analyse équivalent est p
.
La dernière (onzième) fonction membre protégée virtuelle :
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
Se comporte comme la première, sauf qu’elle essaie de mettre en correspondance un champ d’entrée booléen complet et non vide. Si elle réussit, elle convertit le champ d’entrée booléen en valeur de type bool
et stocke cette valeur dans val.
Un champ d’entrée booléen peut avoir deux formes. Si iosbase.flags() & ios_base::
boolalpha est false, il est identique à un champ d’entrée d’entier, sauf que la valeur convertie doit être 0 (pour false) ou 1 (pour true). Dans le cas contraire, la séquence doit correspondre à fac.
numpunct::falsename()
(pour false) ou à fac.
numpunct::truename()
(pour true).
Exemple
Consultez l’exemple relatif à get, où la fonction membre virtuelle est appelée par do_get
.
num_get ::get
Extrait une valeur numérique ou booléenne d'une séquence de caractères.
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned short& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned int& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
Paramètres
first
Début de la plage de caractères à partir de laquelle lire le nombre.
last
Fin de la plage de caractères à partir de laquelle lire le nombre.
iosbase
ios_base dont les indicateurs sont utilisés par la conversion.
state
État auquel failbit (voir ios_base::iostate) est ajouté en cas d’échec.
val
Valeur qui a été lue.
Valeur de retour
Itérateur une fois que la valeur a été lue.
Notes
Toutes les fonctions membres retournent do_get( first, last, iosbase, state, val)
.
La première fonction membre protégée virtuelle tente de faire correspondre des éléments séquentiels en commençant au premier dans la séquence [ first
, last
) jusqu’à ce qu’elle ait reconnu un champ d’entrée d’entier complet et non vide. Si elle réussit, elle convertit ce champ en sa valeur équivalente en tant que type long
et stocke le résultat en val. Elle retourne un itérateur désignant le premier élément au-delà du champ d’entrée numérique. Sinon, la fonction ne stocke rien dans val et définit ios_base::failbit
dans l’état. Elle retourne un itérateur désignant le premier élément au-delà de tout préfixe d’un champ d’entrée d’entier valide. Dans les deux cas, si la valeur de retour est égale à la dernière, la fonction est définie ios_base::eofbit
en état.
Le champ d’entrée d’entier est converti d’après les mêmes règles que celles utilisées par les fonctions d’analyse pour la mise en correspondance et la conversion d’une série d’éléments char
d’un fichier. Chaque élément de ce char
type est supposé mapper à un élément de type CharType
équivalent par un mappage simple, un-à-un. La spécification de conversion d’analyse équivalente est déterminée comme suit :
Si
iosbase.
les& ios_base::basefield == ios_base::
indicateurs oct, la spécification de conversion est .lo
Si
iosbase.flags & ios_base::basefield == ios_base::
hex, la spécification de conversion estlx
.Si
iosbase.flags & ios_base::basefield == 0
, la spécification de conversion estli
.Autrement, la spécification de conversion est
ld
.
Le format d’un champ d’entrée entier est déterminé par la facette fac
de paramètres régionaux retournée par l’appel use_facet<
numpunct
<Elem>(iosbase.
getloc.())
Plus précisément :
fac.
grouping détermine comment les chiffres sont regroupés à gauche de la virgule décimale.fac.
thousands_sep détermine la séquence qui sépare les groupes de chiffres à gauche de la virgule décimale.
Si aucune instance de fac.thousands_sep
ne se produit dans le champ d’entrée numérique, aucune contrainte de regroupement n’est imposée. Dans le cas contraire, toutes les contraintes de regroupement imposées par fac.grouping
sont appliquées et les séparateurs sont supprimés avant la conversion de l’analyse.
La deuxième fonction membre protégée virtuelle :
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
Se comporte comme la première, sauf qu’elle remplace une spécification de conversion de ld
par lu
. Si elle réussit, elle convertit le champ d’entrée numérique en valeur de type unsigned long
et stocke cette valeur en val.
La troisième fonction membre protégée virtuelle :
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
Se comporte comme la première, sauf qu’elle essaie de mettre en correspondance un champ d’entrée à virgule flottante complet et non vide. fac.
decimal_point détermine la séquence qui sépare les chiffres entiers des chiffres de fraction. Le spécificateur de conversion d’analyse équivalent est lf
.
La quatrième fonction membre protégée virtuelle :
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
se comporte le même que le troisième, sauf que le spécificateur de conversion d’analyse équivalent est Lf
.
La cinquième fonction membre protégée virtuelle :
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
Se comporte comme la première, sauf que le spécificateur de conversion d’analyse équivalent est p
.
La sixième fonction membre protégée virtuelle :
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
Se comporte comme la première, sauf qu’elle essaie de mettre en correspondance un champ d’entrée booléen complet et non vide. Si elle réussit, elle convertit le champ d’entrée booléen en valeur de type bool
et stocke cette valeur dans val.
Un champ d’entrée booléen peut avoir deux formes. Si iosbase.flags & ios_base::
boolalpha est false
, il est identique à un champ d’entrée entier, sauf que la valeur convertie doit être 0 (pour false
) ou 1 (pour true
). Sinon, la séquence doit correspondre à fac.
falsename (pour false
) oufac.
truename (pour true
).
Exemple
// num_get_get.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
locale loc( "german_germany" );
basic_stringstream<char> psz, psz2;
psz << "-1000,56";
ios_base::iostate st = 0;
long double fVal;
cout << use_facet <numpunct <char> >(loc).thousands_sep( ) << endl;
psz.imbue( loc );
use_facet <num_get <char> >
(loc).get( basic_istream<char>::_Iter( psz.rdbuf( ) ),
basic_istream<char>::_Iter(0), psz, st, fVal );
if ( st & ios_base::failbit )
cout << "money_get( ) FAILED" << endl;
else
cout << "money_get( ) = " << fVal << endl;
}
num_get ::iter_type
Type qui décrit un itérateur d'entrée.
typedef InputIterator iter_type;
Notes
Le type est un synonyme du paramètre de modèle InputIterator
.
num_get ::num_get
Constructeur des objets de type num_get
utilisés pour extraire des valeurs numériques depuis des séquences.
explicit num_get(size_t refs = 0);
Paramètres
Refs
Valeur entière qui sert à spécifier le type de gestion de la mémoire pour l’objet.
Notes
Les valeurs possibles pour le paramètre refs et leur signification sont les suivantes :
0 : la durée de vie de l’objet est gérée par les paramètres régionaux qui le contiennent.
1 : la durée de vie de l’objet doit être gérée manuellement.
> 1 : Ces valeurs ne sont pas définies.
Aucun exemple direct n’est possible, car le destructeur est protégé.
Le constructeur initialise son objet de base avec locale::
une facette(refs)
.
Voir aussi
<paramètres régionaux>
facet, classe
Sécurité des threads dans la bibliothèque C++ Standard