Partager via


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 longet 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 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 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

<locale>
facet, classe
Sécurité des threads dans la bibliothèque C++ Standard