Classe num_put

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

Sintassi

template <class CharType,
    class OutputIterator = ostreambuf_iterator<CharType>>
class num_put : public locale::facet;

Parametri

CharType
Tipo utilizzato all'interno di un programma per codificare i caratteri delle impostazioni locali.

OutputIterator
Tipo di iteratore in cui le funzioni Put numeriche scrivono il proprio output.

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_put Costruttore per oggetti di tipo num_put.

Typedef

Nome tipo Descrizione
char_type Tipo utilizzato per descrivere un carattere utilizzato dalle impostazioni locali.
iter_type Tipo che descrive un iteratore di output.

Funzioni membro

Funzione membro Descrizione
do_put Funzione virtuale chiamata per convertire un numero in una sequenza di CharType che rappresenta il numero formattato per le impostazioni locali specificate.
put Converte un numero in una sequenza di CharType che rappresenta il numero formattato per le impostazioni locali specificate.

Requisiti

Intestazione:<impostazioni locali>

Spazio dei nomi: std

num_put::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_put::d o_put

Funzione virtuale chiamata per convertire un numero in una sequenza di CharType che rappresenta il numero formattato per le impostazioni locali specificate.

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    bool val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    long val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    unsigned long val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    double val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    long double val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    const void* val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    const long long val) const;

virtual iter_type do_put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    const unsigned long long val) const;

Parametri

next
Iteratore che punta al primo elemento della stringa inserita.

_Iosbase
Specifica il flusso contenente le impostazioni locali con il facet numpunct usato per creare la punteggiatura dell'output e i flag per la formattazione dell'output.

_Riempire
Carattere usato per la spaziatura.

val
Numero o tipo booleano che deve essere incluso nell'output.

Valore restituito

Iteratore di output che punta alla posizione successiva all'ultimo elemento prodotto.

Osservazioni:

La prima funzione membro protetta virtuale genera elementi sequenziali a partire da accanto per produrre un campo di output integer dal valore di val. La funzione restituisce un iteratore che designa la posizione in cui inserire un elemento immediatamente successiva al campo di output di tipo Integer generato.

Il campo di output di tipo Integer viene generato in base alle stesse regole usate dalle funzioni di stampa per la generazione di una serie di elementi char in un file. Ogni elemento char di questo tipo viene considerato mappato a un elemento equivalente di tipo CharType tramite un semplice mapping uno-a-uno. Se una funzione di stampa esegue il pad di un campo con spazi o la cifra 0, do_put usa invece fill. La specifica di conversione di stampa 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

  • In caso contrario, la specifica di conversione è ld.

Se iosbase. width è diverso da zero, viene anteposta una larghezza di campo di questo valore. La funzione chiama quindi iosbase. width(0) per reimpostare la larghezza del campo su zero.

Il riempimento si verifica solo se il numero minimo di elementi N necessario per specificare il campo di output è minore di iosbase. width. Tale riempimento è costituito da una sequenza di N - copie di riempimento di larghezza. Il riempimento si verifica quindi nel modo seguente:

  • Se iosbase. flags & ios_base::adjustfield == ios_base::left, il flag - è anteporto. Il riempimento si verifica dopo il testo generato.

  • Se iosbase.flags & ios_base::adjustfieldios_base:: == interno, il flag 0 viene anteporto. Per un campo di output numerico, il riempimento si verifica quando le funzioni di stampa riempiono il campo con la cifra 0.

  • In caso contrario, non viene anteposto alcun flag aggiuntivo. Il riempimento si verifica prima della sequenza generata.

Infine:

  • Se iosbase. flags & ios_base::showpos è diverso da zero, il flag + viene anteposto alla specifica di conversione.

  • Se iosbase. flags & ios_base::showbase è diverso da zero, il flag # viene anteporto alla specifica di conversione.

Il formato di un campo di output integer è determinato ulteriormente dal facet delle impostazioni locali restituito dalla chiamata use_facet<numpunct<Elem>( iosbase. getloc). 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 nessun vincolo di raggruppamento viene imposto da fac. grouping (il primo elemento ha il valore CHAR_MAX), non verranno generate istanze di fac. thousands_sep nel campo di output. In caso contrario, i separatori vengono inseriti dopo la conversione di stampa.

La seconda funzione membro virtuale protetta:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    unsigned long val) const;

si comporta come la prima, ad eccezione del fatto che sostituisce una specifica di conversione di ld con lu.

La terza funzione membro virtuale protetta:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    double val) const;

si comporta come la prima, ad eccezione del fatto che genera un campo di output a virgola mobile dal valore di val. fac. decimal_point determina la sequenza che separa le cifre intere dalle cifre frazionarie. La specifica di conversione di stampa equivalente viene determinata nel modo seguente:

  • Se iosbase. flags & ios_base::floatfield == ios_base::fixed, la specifica di conversione è .lf

  • Se iosbase. flags & ios_base::floatfieldios_base:: == scientific, la specifica di conversione è .le Se iosbase. flags & ios_base::maiuscolo è diverso da zero, e viene sostituito con E.

  • In caso contrario, la specifica di conversione è lg. Se iosbase. flags & ios_base::uppercase è diverso da zero, g viene sostituito con G.

Se iosbase. flags & ios_base::fixed è diverso da zero o se iosbase. precision è maggiore di zero, una precisione con il valore iosbase. precision viene anteposta alla specifica di conversione. Il comportamento del riempimento è uguale a quello per un campo di output di tipo Integer. Il carattere di riempimento è fill. Infine:

  • Se iosbase. flags & ios_base::showpos è diverso da zero, il flag + viene anteposto alla specifica di conversione.

  • Se iosbase. flags & ios_base::showpoint è diverso da zero, il flag # viene anteporto alla specifica di conversione.

La quarta funzione membro virtuale protetta:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    long double val) const;

si comporta allo stesso modo del terzo, ad eccezione del fatto che il qualificatore l nella specifica di conversione viene sostituito con L.

La quinta funzione membro virtuale protetta:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    const void* val) const;

si comporta come la prima, ad eccezione del fatto che la specifica di conversione è p, più qualsiasi identificatore necessario per specificare il riempimento.

La sesta funzione membro virtuale protetta:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    bool val) const;

si comporta come il primo, ad eccezione del fatto che genera un campo di output booleano da val.

Un campo di output booleano ha una delle due forme seguenti. Se iosbase.flags & ios_base::boolalpha è false, la funzione membro restituisce do_put(_Next, _Iosbase, _Fill, (long)val), che in genere produce una sequenza generata di 0 (per false) o 1 (per true). In caso contrario, la sequenza generata è fac.falsename (per false) o fac.truename (per true).

La settima funzione membro virtuale protetta:

virtual iter_type do_put(iter_type next,
    ios_base& iosbase,
    Elem fill,
    long long val) const;

si comporta come la prima, ad eccezione del fatto che sostituisce una specifica di conversione di ld con lld.

L'ottava funzione membro virtuale protetta:

virtual iter_type do_put(iter_type next,
    ios_base& iosbase,
    Elem fill,
    unsigned long long val) const;

si comporta come la prima, ad eccezione del fatto che sostituisce una specifica di conversione di ld con llu.

Esempio

Vedere l'esempio relativo a put, che chiama do_put.

num_put::iter_type

Tipo che descrive un iteratore di output.

typedef OutputIterator iter_type;

Osservazioni:

Il tipo è un sinonimo del parametro di modello OutputIterator.

num_put::num_put

Costruttore per oggetti di tipo num_put.

explicit num_put(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).

num_put::p ut

Converte un numero in una sequenza di CharTypes che rappresenta il numero formattato per una determinata impostazione locale.

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    bool val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    long val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    unsigned long val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    Long long val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    Unsigned long long val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    double val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    long double val) const;

iter_type put(
    iter_type dest,
    ios_base& _Iosbase,
    _Elem _Fill,
    const void* val) const;

Parametri

dest
Iteratore che punta al primo elemento della stringa inserita.

_Iosbase
Specifica il flusso contenente le impostazioni locali con il facet numpunct usato per creare la punteggiatura dell'output e i flag per la formattazione dell'output.

_Riempire
Carattere usato per la spaziatura.

val
Numero o tipo booleano che deve essere incluso nell'output.

Valore restituito

Iteratore di output che punta alla posizione successiva all'ultimo elemento prodotto.

Osservazioni:

Tutte le funzioni membro restituiscono do_put( next, _Iosbase, _Fill, val).

Esempio

// num_put_put.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
   locale loc( "german_germany" );
   basic_stringstream<char> psz2;
   ios_base::iostate st = 0;
   long double fVal;
   cout << "The thousands separator is: "
        << use_facet < numpunct <char> >(loc).thousands_sep( )
        << endl;

   psz2.imbue( loc );
   use_facet < num_put < char > >
      ( loc ).put(basic_ostream<char>::_Iter(psz2.rdbuf( ) ),
                    psz2, ' ', fVal=1000.67);

   if ( st & ios_base::failbit )
      cout << "num_put( ) FAILED" << endl;
   else
      cout << "num_put( ) = " << psz2.rdbuf( )->str( ) << endl;
}
The thousands separator is: .
num_put( ) = 1.000,67

Vedi anche

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