Classe num_get
Modello di classe che descrive un oggetto che può fungere da facet delle impostazioni locali per controllare le conversioni di sequenze di tipo CharType
in valori numerici.
Sintassi
template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class num_get : public locale::facet;
Parametri
CharType
Tipo utilizzato all'interno di un programma per codificare i caratteri delle impostazioni locali.
InputIterator
Tipo di iteratore da cui le funzioni get numeric leggono il relativo input.
Osservazioni:
Come in qualsiasi facet delle impostazioni locali, l'ID dell'oggetto statico ha un valore archiviato iniziale uguale a zero. Il primo tentativo di accedere a tale valore archiviato consente di archiviare un valore positivo univoco in id.
Costruttori
Costruttore | Descrizione |
---|---|
num_get | Costruttore per oggetti di tipo num_get utilizzati per estrarre i valori numerici dalle sequenze. |
Typedef
Nome tipo | Descrizione |
---|---|
char_type | Tipo utilizzato per descrivere un carattere utilizzato dalle impostazioni locali. |
iter_type | Tipo che descrive un iteratore di input. |
Funzioni membro
Funzione membro | Descrizione |
---|---|
do_get | Funzione virtuale chiamata per estrarre un valore numerico o booleano da una sequenza di caratteri. |
get | Estrae un tipo numerico o booleano da una sequenza di caratteri. |
Requisiti
Intestazione:<impostazioni locali>
Spazio dei nomi: std
num_get::char_type
Tipo utilizzato per descrivere un carattere utilizzato dalle impostazioni locali.
typedef CharType char_type;
Osservazioni:
Il tipo è un sinonimo del parametro di modello CharType.
num_get::d o_get
Funzione virtuale chiamata per estrarre un valore numerico o booleano da una sequenza di caratteri.
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;
Parametri
first
Inizio dell'intervallo di caratteri da cui leggere il numero.
last
Fine dell'intervallo di caratteri da cui leggere il numero.
iosbase
ios_base i cui flag vengono usati per la conversione.
state
Lo stato a cui viene aggiunto failbit (vedere ios_base:: iostate) in caso di errore.
val
Valore letto.
Valore restituito
Iteratore dopo la lettura del valore.
Osservazioni:
La prima funzione membro virtuale protetta
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
corrisponde agli elementi sequenziali che iniziano inizialmente nella sequenza [first, last)
fino a quando non ha riconosciuto un campo di input intero completo e non vuoto. In caso di esito positivo, questo campo viene convertito nel valore equivalente come tipo long
e archivia il risultato in val. Restituisce un iteratore che designa il primo elemento successivo al campo di input numerico. In caso contrario, la funzione archivia nulla in val e imposta ios_base::failbit
in state
. Restituisce un iteratore che designa il primo elemento successivo a qualsiasi prefisso di un campo di input di tipo Integer valido. In entrambi i casi, se il valore restituito è uguale a last
, la funzione imposta ios_base::eofbit
in state
.
Il campo di input di tipo Integer viene convertito in base alle stesse regole usate dalle funzioni di analisi per la corrispondenza e la conversione di una serie di elementi char
da un file. Ogni elemento di questo char
tipo viene considerato mappato a un elemento equivalente di tipo Elem
tramite un semplice mapping uno-a-uno. La specifica di conversione dell'analisi equivalente viene determinata nel modo seguente:
Se iosbase.
ios_base::flags() & ios_base::basefield == ios_base::
oct, la specifica di conversione è lo
.
Se iosbase.flags() & ios_base::basefield == ios_base::
hex, la specifica di conversione è lx
.
Se iosbase.flags() & ios_base::basefield == 0
, la specifica di conversione è li
.
In caso contrario, la specifica di conversione è ld
.
Il formato di un campo di input integer è determinato ulteriormente dal facet delle impostazioni locali restituito dalla chiamata use_facet <
numpunct<Elem>(iosbase.
ios_base::getloc())
.fac
In particolare:
fac.
numpunct::grouping()
determina la modalità di raggruppamento delle cifre a sinistra della virgola decimale
fac.
numpunct::thousands_sep()
determina la sequenza che separa gruppi di cifre a sinistra della virgola decimale.
Se non esistono istanze di fac.thousands_sep()
nel campo di input numerico, non viene imposto alcun vincolo di raggruppamento. In caso contrario, vengono applicati i vincoli di raggruppamento imposti da fac.grouping()
e i separatori vengono rimossi prima che venga eseguita la conversione dell'analisi.
La quarta funzione membro virtuale protetta:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
si comporta come la prima, ad eccezione del fatto che sostituisce una specifica di conversione di ld
con lu
. Se ha esito positivo, converte il campo di input numerico in un valore di tipo unsigned long
e archivia tale valore in val.
La quinta funzione membro virtuale protetta:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
si comporta come la prima, ad eccezione del fatto che sostituisce una specifica di conversione di ld
con lld
. Se ha esito positivo, converte il campo di input numerico in un valore di tipo long long
e archivia tale valore in val.
La sesta funzione membro virtuale protetta:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
si comporta come la prima, ad eccezione del fatto che sostituisce una specifica di conversione di ld
con llu
. Se ha esito positivo, converte il campo di input numerico in un valore di tipo unsigned long long
e archivia tale valore in val.
La settima funzione membro virtuale protetta:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
si comporta come la prima, ad eccezione del fatto che tenta di creare una corrispondenza con un campo di input a virgola mobile non vuoto. fac.
numpunct::decimal_point()
determina la sequenza che separa le cifre intere dalle cifre frazionarie. L'identificatore della conversione di analisi equivalente è lf
.
L'ottava funzione membro virtuale protetta:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
si comporta come la prima, ad eccezione del fatto che tenta di creare una corrispondenza con un campo di input a virgola mobile non vuoto. fac.
numpunct::decimal_point()
determina la sequenza che separa le cifre intere dalle cifre frazionarie. L'identificatore della conversione di analisi equivalente è lf
.
La nona funzione membro virtuale protetta:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
si comporta come l'ottava, ad eccezione del fatto che l'identificatore della conversione di analisi equivalente è Lf
.
La decima funzione membro protetta virtuale:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
si comporta come la prima, ad eccezione del fatto che l'identificatore della conversione di analisi equivalente è p
.
L'undicesima e ultima funzione membro virtuale protetta:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
si comporta come la prima, ad eccezione del fatto che tenta di creare una corrispondenza con un campo di input booleano, completo e non vuoto. Se ha esito positivo, converte il campo di input booleano in un valore di tipo bool
e archivia tale valore in val.
Un campo di input booleano ha una delle due forme seguenti. Se iosbase.flags() & ios_base::
boolalpha è false, è uguale al campo di input di tipo Integer, ad eccezione del fatto che il valore convertito deve essere 0 (per false) o 1 (per true). In caso contrario, la sequenza deve corrispondere a fac.
numpunct::falsename()
(per false) o a fac.
numpunct::truename()
(per true).
Esempio
Vedere l'esempio relativo a get, in cui la funzione membro virtuale viene chiamata da do_get
.
num_get::get
Estrae un tipo numerico o booleano da una sequenza di caratteri.
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;
Parametri
first
Inizio dell'intervallo di caratteri da cui leggere il numero.
last
Fine dell'intervallo di caratteri da cui leggere il numero.
iosbase
ios_base i cui flag vengono usati per la conversione.
state
Lo stato a cui viene aggiunto failbit (vedere ios_base:: iostate) in caso di errore.
val
Valore letto.
Valore restituito
Iteratore dopo la lettura del valore.
Osservazioni:
Tutte le funzioni membro restituiscono do_get( first, last, iosbase, state, val)
.
La prima funzione membro virtuale protetta cerca la corrispondenza con elementi sequenziali a partire dall'inizio nella sequenza [ first
, last
) fino a quando non viene riconosciuto un campo di input di tipo Integer completo e non vuoto. Se ha esito positivo, converte questo campo nel valore equivalente come tipo long
e archivia il risultato in val. Restituisce un iteratore che designa il primo elemento successivo al campo di input numerico. In caso contrario, la funzione archivia nulla in val e imposta ios_base::failbit
nello stato . Restituisce un iteratore che designa il primo elemento successivo a qualsiasi prefisso di un campo di input di tipo Integer valido. In entrambi i casi, se il valore restituito è uguale all'ultimo, la funzione imposta ios_base::eofbit
lo stato.
Il campo di input di tipo Integer viene convertito in base alle stesse regole usate dalle funzioni di analisi per la corrispondenza e la conversione di una serie di elementi char
da un file. Ogni elemento di questo char
tipo viene considerato mappato a un elemento equivalente di tipo CharType
tramite un semplice mapping uno-a-uno. La specifica di conversione di analisi equivalente viene determinata nel modo seguente:
Se
iosbase.
flags& ios_base::basefield == ios_base::
oct, la specifica di conversione èlo
.Se
iosbase.flags & ios_base::basefield == ios_base::
hex, la specifica di conversione èlx
.Se
iosbase.flags & ios_base::basefield == 0
, la specifica di conversione èli
.In caso contrario, la specifica di conversione è
ld
.
Il formato di un campo di input integer è determinato ulteriormente dal facet delle impostazioni locali restituito dalla chiamata use_facet<
<Elem>(iosbase.
numpunct
getloc.())
fac
In particolare:
fac.
grouping determina la modalità di raggruppamento delle cifre a sinistra della virgola decimale.fac.
thousands_sep determina la sequenza che separa gruppi di cifre a sinistra della virgola decimale.
Se non esistono istanze di fac.thousands_sep
nel campo di input numerico, non viene imposto alcun vincolo di raggruppamento. In caso contrario, tutti i vincoli di raggruppamento imposti da fac.grouping
vengono applicati e i separatori vengono rimossi prima che si verifichi la conversione dell'analisi.
La seconda funzione membro virtuale protetta:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
si comporta come la prima, ad eccezione del fatto che sostituisce una specifica di conversione di ld
con lu
. In caso di esito positivo, converte il campo di input numerico in un valore di tipo unsigned long
e archivia tale valore in val.
La terza funzione membro virtuale protetta:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
si comporta come la prima, ad eccezione del fatto che tenta di creare una corrispondenza con un campo di input a virgola mobile non vuoto. fac.
decimal_point determina la sequenza che separa le cifre intere dalle cifre frazionarie. L'identificatore della conversione di analisi equivalente è lf
.
La quarta funzione membro virtuale protetta:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
si comporta allo stesso terzo, ad eccezione del fatto che l'identificatore di conversione dell'analisi equivalente è Lf
.
La quinta funzione membro virtuale protetta:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
si comporta come la prima, ad eccezione del fatto che l'identificatore della conversione di analisi equivalente è p
.
La sesta funzione membro virtuale protetta:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
si comporta come la prima, ad eccezione del fatto che tenta di creare una corrispondenza con un campo di input booleano, completo e non vuoto. Se ha esito positivo, converte il campo di input booleano in un valore di tipo bool
e archivia tale valore in val.
Un campo di input booleano ha una delle due forme seguenti. Se iosbase.flags & ios_base::
boolalpha è false
, è uguale a un campo di input integer, ad eccezione del fatto che il valore convertito deve essere 0 (per false
) o 1 (per true
). In caso contrario, la sequenza deve corrispondere fac.
a falsename (per false
) ofac.
truename (per true
).
Esempio
// 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
Tipo che descrive un iteratore di input.
typedef InputIterator iter_type;
Osservazioni:
Il tipo è un sinonimo del parametro di modello InputIterator
.
num_get::num_get
Costruttore per oggetti di tipo num_get
utilizzati per estrarre i valori numerici dalle sequenze.
explicit num_get(size_t refs = 0);
Parametri
Refs
Valore Integer che consente di specificare il tipo di gestione della memoria per l'oggetto.
Osservazioni:
I valori possibili per il parametro refs e il loro significato sono:
0: la durata dell'oggetto è gestita dalle impostazioni locali che lo contengono.
1: la durata dell'oggetto deve essere gestita manualmente.
> 1: questi valori non sono definiti.
Non è possibile fornire esempi diretti, poiché il distruttore è protetto.
Il costruttore inizializza l'oggetto di base con locale::
facet(refs)
.
Vedi anche
<impostazioni locali>
Classe facet
Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)