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
Le début de la plage de caractères depuis lequel lire le nombre._Last
La fin de la plage de caractères depuis laquelle lire le nombre._Iosbase
Le ios_base dont les indicateurs sont utilisés par la conversion._State
L'état dans lequel le failbit (voir ios_base::iostate) est créé lors de l'échec._Val
Valeur qui a été lue.
Valeur de retour
L'itérateur situé après la valeur a été lu.
Notes
Toutes les fonctions membre retournent do_get (_First, _Last, _Iosbase, _State, _Val).
La première fonction membre protégée virtuelle tente d'associer des éléments séquentiels commençant au début dans la séquence [_First, _Last) jusqu'à ce qu'elle ait identifié un champ d'entrée entier complet et non vide. Si a réussi, elle convertit ce champ dans sa valeur équivalente au type long et stocke le résultat dans _Val. Retourne un itérateur indiquant 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 _State. Retourne un itérateur indiquant le premier élément au delà de tout préfixe d'un champ d'entrée entier valide. Dans l'un et l'autre cas, si la valeur de retour est last, la fonction définit ios_base::eofbit dans _State.
Le champ d'entrée entier est converti par les mêmes règles que celles utilisées par les fonctions d'analyse pour la correspondance et la conversion d'une série d'éléments char dans un fichier. Chaque élémentchar de la sorte est utilisé pour mapper à un élément équivalent du type CharType par un simple mapping one-to-one. La spécification de conversion d'analyse équivalente est déterminée comme suit :
Si iosbase.83dk98wz(v=vs.120).md & 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.
Sinon, la spécification de conversion est ld.
Le format d'un champ d'entrée entier est également déterminé par la facette de paramètres régionaux fac retournée par l'appel use_facet <numpunct<Elem>(iosbase.getloc). Plus précisément :
fac.grouping détermine comment les données sont regroupées à gauche de toute virgule décimale.
fac.thousands_sep détermine la séquence qui sépare les groupes de chiffres à gauche de toute virgule décimale.
Si les instances de fac.thousands_sep se produisent dans le champ d'entrée numérique, aucune agrégation de contrainte n'est appliquée. Sinon, toutes les contraintes d'agrégation imposées par fac.grouping sont appliquées et les séparateurs sont supprimés avant que la conversion d'analyse ne se produise.
La deuxième fonction membre virtuelle protégée :
virtual iter_type do_get(iter_type _First, iter_type _Last,
ios_base& _Iosbase, ios_base::iostate& _State,
unsigned long& _Val) const;
se comporte de la même manière que la première, sauf qu'elle remplace une spécification de conversion de ld par lu. En cas de réussite, elle convertit le champ d'entrée numérique en une valeur de type unsigned long et stocke cette valeur dans _Val.
La troisième fonction membre virtuelle protégée :
virtual iter_type do_get(iter_type _First, iter_type _Last,
ios_base& _Iosbase, ios_base::iostate& _State,
double& _Val) const;
se comporte de la même manière que la première, mais elle essaie de faire correspondre un champ d'entrée à virgule flottante complet et vide. fac.decimal_point détermine la séquence qui sépare les chiffres entiers des chiffres fraction. Le spécificateur équivalent de conversion d'analyse est lf.
La quatrième fonction membre virtuelle protégée :
virtual iter_type do_get(iter_type _First, iter_type _Last,
ios_base& _Iosbase, ios_base::iostate& _State,
long double& _Val) const;
se comporte de la même manière que la troisième, mais le spécificateur équivalent de conversion d'analyse est Lf.
La cinquième fonction membre virtuelle protégée :
virtual iter_type do_get(iter_type _First, iter_type _Last,
ios_base& _Iosbase, ios_base::iostate& _State,
void *& _Val) const;
se comporte de la même manière que la première mais le spécificateur équivalent de conversion d'analyse est p.
La sixième fonction membre virtuelle protégée :
virtual iter_type do_get(iter_type _First, iter_type _Last,
ios_base& _Iosbase, ios_base::iostate& _State,
bool& _Val) const;
se comporte de la même manière que la première, mais elle essaie de faire correspondre un champ d'entrée booléen complet et vide. En cas de réussite, elle convertit le champ d'entrée booléen en une valeur de type bool et stocke cette valeur dans _Val.
Un champ d'entrée booléen prend l'une des deux formes suivantes. Si iosbase.flags & ios_base::boolalpha est false, c'est le même qu'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 soit fac.falsename (pour false), soit fac.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;
}
Sortie
.
money_get( ) = -1000.56
Configuration requise
En-tête : <locale>
Espace de noms : std