Condividi tramite


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 longe 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.numpunctgetloc.())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++)