Classe money_get

Il modello di classe descrive un oggetto che può fungere da facet delle impostazioni locali per controllare le conversioni di sequenze di tipo CharType in valori monetari.

Sintassi

template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class money_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 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
money_get Costruttore per oggetti di tipo money_get utilizzati per estrarre i valori numerici dalle sequenze che rappresentano valori monetari.

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.
string_type Tipo che descrive una stringa contenente caratteri di tipo CharType.

Funzioni membro

Funzione membro Descrizione
do_get Funzione virtuale chiamata per estrarre un valore numerico da una sequenza di caratteri che rappresenta un valore monetario.
get Estrae un valore numerico da una sequenza di caratteri che rappresenta un valore monetario.

Requisiti

Intestazione:<impostazioni locali>

Spazio dei nomi: std

money_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.

money_get::d o_get

Funzione virtuale chiamata per estrarre un valore numerico da una sequenza di caratteri che rappresenta un valore monetario.

virtual iter_type do_get(iter_type first,
    iter_type last,
    bool Intl,
    ios_base& Iosbase,
    ios_base::iostate& State,
    long double& val) const virtual iter_type do_get(iter_type first,
    iter_type last,
    bool Intl,
    ios_base& Iosbase,
    ios_base::iostate& State,
    string_type& val) const

Parametri

first
Iteratore di input che indica l'inizio della sequenza da convertire.

last
Iteratore di input che indica la fine della sequenza da convertire.

Intl
Valore booleano che indica il tipo di simbolo di valuta previsto nella sequenza: true se internazionale, false se nazionale.

Iosbase
Flag di formato che, quando impostato, indica che il simbolo di valuta è facoltativo; in caso contrario, indica che è necessario.

Stato
Imposta elementi della maschera di bit appropriati per lo stato del flusso in base all'esito positivo o negativo delle operazioni.

val
Stringa in cui è archiviata la sequenza convertita.

Valore restituito

Iteratore di input che punta al primo elemento oltre il campo di input di tipo valuta.

Osservazioni:

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 valuta completo e non vuoto. Se ha esito positivo, converte questo campo in una sequenza di una o più cifre decimali, preceduto facoltativamente da un segno meno ( -), per rappresentare l'importo e archivia il risultato nell'oggetto val string_type. Restituisce un iteratore che designa il primo elemento successivo al campo di input di tipo valuta. In caso contrario, la funzione archivia una sequenza vuota 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 valuta valido. In entrambi i casi, se il valore restituito è uguale a last, la funzione imposta ios_base::eofbit in State.

La seconda funzione membro protetta virtuale si comporta come la prima, ad eccezione del fatto che se ha esito positivo converte la sequenza di cifre con segno facoltativamente in un valore di tipo long double e archivia tale valore in val.

Il formato di un campo di input monetario è determinato dal facet delle impostazioni locali restituito dalla chiamata effettiva use_facet<moneypunct<CharType, intl>>( iosbase. getloc).

In particolare:

  • fac. neg_format determina l'ordine in cui vengono visualizzati i componenti del campo.

  • fac. curr_symbol determina la sequenza di elementi che costituisce il simbolo di valuta.

  • fac. positive_sign determina la sequenza di elementi che costituisce un segno positivo.

  • fac. negative_sign determina la sequenza di elementi che costituisce un segno negativo.

  • fac. grouping determina la modalità di raggruppamento delle cifre a sinistra della virgola decimale.

  • fac. thousands_sep determina l'elemento che separa gruppi di cifre a sinistra della virgola decimale.

  • fac. decimal_point determina l'elemento che separa le cifre intere dalle cifre frazionarie.

  • fac. frac_digits determina il numero di cifre frazionarie significative a destra della virgola decimale. Durante l'analisi di un importo monetario con più cifre frazionarie chiamate da frac_digits, do_get interrompe l'analisi dopo aver utilizzato al massimo frac_digits caratteri.

Se la stringa di segno ( fac. negative_sign o fac. positive_sign) ha più di un elemento, viene trovata la corrispondenza solo del primo elemento in cui l'elemento uguale a money_base::sign viene visualizzato nel modello di formato ( fac. neg_format). Gli eventuali elementi restanti vengono messi in corrispondenza alla fine del campo di input di tipo valuta. Se nessuna delle due stringhe contiene un elemento corrispondente al successivo elemento del campo di input di tipo valuta, la stringa segno viene accettata come vuota e il segno è positivo.

Se iosbase. flags & showbase è diverso da zero, la stringa fac. curr_symbol deve corrispondere nel punto in cui l'elemento uguale a money_base::symbol compare nel modello di formato. In caso contrario, se money_base::symbol viene visualizzato alla fine del modello di formato, e non rimangono elementi della stringa segno da associare, il simbolo di valuta non corrisponde. In caso contrario, il simbolo di valuta vene messo in corrispondenza in modo facoltativo.

Se non vengono visualizzate istanze di fac. thousands_sep nella parte valore del campo di input di tipo valuta, dove l'elemento uguale a money_base::value compare nel modello di formato, non viene applicato alcun vincolo di raggruppamento. In caso contrario, vengono applicati i vincoli di raggruppamento imposti da fac. grouping. Si noti che la sequenza di cifre risultante rappresenta un intero le cui cifre decimali fac. frac_digits di ordine inferiore vengono prese in considerazione alla destra della virgola decimale.

Lo spazio vuoto arbitrario viene messo in corrispondenza nel punto in cui l'elemento uguale a money_base::space compare nel modello di formato, se viene visualizzato in una posizione diversa dalla fine del modello di formato. In caso contrario, non viene messo in corrispondenza alcuno spazio vuoto interno. Un elemento ch viene considerato spazio vuoto se use_facet<ctype<CharType>>( iosbase. getloc). is( ctype_base::space, ch) è true.

Esempio

Vedere l'esempio relativo a get, che chiama do_get.

money_get::get

Estrae un valore numerico da una sequenza di caratteri che rappresenta un valore monetario.

iter_type get(iter_type first,
    iter_type last,
    bool Intl,
    ios_base& Iosbase,
    ios_base::iostate& State,
    long double& val) const;

iter_type get(iter_type first,
    iter_type last,
    bool Intl,
    ios_base& Iosbase,
    ios_base::iostate& State,
    string_type& val) const;

Parametri

first
Iteratore di input che indica l'inizio della sequenza da convertire.

last
Iteratore di input che indica la fine della sequenza da convertire.

Intl
Valore booleano che indica il tipo di simbolo di valuta previsto nella sequenza: true se internazionale, false se nazionale.

Iosbase
Flag di formato che, quando impostato, indica che il simbolo di valuta è facoltativo; in caso contrario, indica che è necessario

Stato
Imposta elementi della maschera di bit appropriati per lo stato del flusso in base all'esito positivo o negativo delle operazioni.

val
Stringa in cui è archiviata la sequenza convertita.

Valore restituito

Iteratore di input che punta al primo elemento oltre il campo di input di tipo valuta.

Osservazioni:

Entrambe le funzioni membro restituiscono do_get(first, last, Intl, Iosbase, State, val).

Esempio

// money_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;
   psz << use_facet<moneypunct<char, 1> >(loc).curr_symbol() << "-1.000,56";
   basic_stringstream< char > psz2;
   psz2 << "-100056" << use_facet<moneypunct<char, 1> >(loc).curr_symbol();

   ios_base::iostate st = 0;
   long double fVal;

   psz.flags( psz.flags( )|ios_base::showbase );
   // Which forced the READING the currency symbol
   psz.imbue(loc);
   use_facet < money_get < char > >( loc ).
      get( basic_istream<char>::_Iter( psz.rdbuf( ) ),
           basic_istream<char>::_Iter( 0 ), true, psz, st, fVal );

   if ( st & ios_base::failbit )
      cout << "money_get(" << psz.str( ) << ", intl = 1) FAILED"
           << endl;
   else
      cout << "money_get(" << psz.str( ) << ", intl = 1) = "
           << fVal/100.0 << endl;

   use_facet < money_get < char > >( loc ).
      get(basic_istream<char>::_Iter(psz2.rdbuf( )),
          basic_istream<char>::_Iter(0), false, psz2, st, fVal);

   if ( st & ios_base::failbit )
      cout << "money_get(" << psz2.str( ) << ", intl = 0) FAILED"
           << endl;
   else
      cout << "money_get(" << psz2.str( ) << ", intl = 0) = "
           << fVal/100.0 << endl;
};

money_get::iter_type

Tipo che descrive un iteratore di input.

typedef InputIterator iter_type;

Osservazioni:

Il tipo è un sinonimo del parametro di modello InputIterator.

money_get::money_get

Costruttore per oggetti di tipo money_get utilizzati per estrarre i valori numerici dalle sequenze che rappresentano valori monetari.

explicit money_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).

money_get::string_type

Tipo che descrive una stringa contenente caratteri di tipo CharType.

typedef basic_string<CharType, Traits, Allocator> string_type;

Osservazioni:

Il tipo descrive una specializzazione del modello di classe basic_string.

Vedi anche

<impostazioni locali>
Classe facet
Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)