num_put-klass

En klassmall som beskriver ett objekt som kan fungera som en språkvariant för att styra konverteringar av numeriska värden till sekvenser av typen CharType.

Syntax

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

Parameterar

CharType
Den typ som används i ett program för att koda tecken i ett språk.

OutputIterator
Den typ av iterator som de numeriska put-funktionerna skriver sina utdata till.

Anmärkningar

Precis som med alla nationella aspekter har det statiska objekt-ID:t ett initialt lagrat värde på noll. Det första försöket att komma åt dess lagrade värde lagrar ett unikt positivt värde i id.

Konstruktörer

Konstruktor Beskrivning
num_put Konstruktorn för objekt av typen num_put.

Typedefs

Typnamn Beskrivning
char_type En typ som används för att beskriva ett tecken som används av ett språk.
iter_type En typ som beskriver en iterator för utdata.

Medlemsfunktioner

Medlemsfunktion Beskrivning
do_put En virtuell funktion som anropas för att konvertera ett tal till en sekvens med CharTypes som representerar det tal som formaterats för ett visst språk.
lägga Konverterar ett tal till en sekvens med CharTypes som representerar talet som är formaterat för ett visst språk.

Kravspecifikation

Rubrik:<Locale>

namnområde: std

num_put::char_type

En typ som används för att beskriva ett tecken som används av ett språk.

typedef CharType char_type;

Anmärkningar

Typen är en synonym för mallparametern CharType.

num_put::d o_put

En virtuell funktion som anropas för att konvertera ett tal till en sekvens med CharTypes som representerar det tal som formaterats för ett visst språk.

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;

Parameterar

nästa
En iterator som hanterar det första elementet i den infogade strängen.

_Iosbase
Angav dataströmmen som innehåller nationella inställningar med den numpunct-fasetter som används för att punktera utdata och flaggor för formatering av utdata.

_Fylla
Ett tecken som används för avstånd.

val
Talet eller den booleska typen som ska matas ut.

Returvärde

En utdata iterator adresserar positionen en utöver det sista elementet som producerades.

Anmärkningar

Den första virtuella skyddade medlemsfunktionen genererar sekventiella element som börjar bredvid för att skapa ett heltalsutdatafält från värdet för val. Funktionen returnerar en iterator som anger nästa plats för att infoga ett element utanför det genererade heltalsutdatafältet.

Heltalsutdatafältet genereras av samma regler som används av utskriftsfunktionerna för att generera en serie char element till en fil. Varje sådant teckenelement antas mappa till ett motsvarande element av typen CharType genom en enkel mappning från ett till ett. Där en utskriftsfunktion fyller ett fält med antingen blanksteg eller siffran 0 använder do_puti fill stället . Motsvarande specifikation för utskriftskonvertering fastställs på följande sätt:

  • Om iosbase. flaggor och ios_base::basefield == ios_base::okt, konverteringsspecifikationen är lo.

  • Om iosbase.flags & ios_base::basefield == ios_base::hex är lxkonverteringsspecifikationen .

  • Annars är ldkonverteringsspecifikationen .

Om iosbase. bredden är icke-noll, en fältbredd för det här värdet läggs till i förväg. Funktionen anropar sedan iosbase. width(0) för att återställa fältbredden till noll.

Utfyllnad sker endast om det minsta antalet element N som krävs för att ange utdatafältet är mindre än iosbase. bredd. Sådan utfyllnad består av en sekvens med N - bredd kopior av fyllning. Utfyllnad sker sedan på följande sätt:

  • Om iosbase. flaggor och ios_base::adjustfield == ios_base::vänster, flaggan - förbereds. (Utfyllnad sker efter den genererade texten.)

  • Om iosbase.flags & ios_base::adjustfield == ios_base::internal, förbereds flaggan 0 . (För ett numeriskt utdatafält sker utfyllnad där utskriftsfunktionerna med 0.)

  • Annars förbereds ingen ytterligare flagga. (Utfyllnad sker före den genererade sekvensen.)

Slutligen:

  • Om iosbase. flaggor och ios_base::showpos är ickezero, flaggan + är förberedd till konverteringsspecifikationen.

  • Om iosbase. flaggor & ios_base::showbase är nonzero, flaggan # läggs till i konverteringsspecifikationen.

Formatet för ett heltalsutdatafält bestäms ytterligare av språkvariantensfasetteringsfac som returneras av anropet use_facet<numpunct<Elem>( iosbase. getloc). Specifikt:

  • fac. gruppering avgör hur siffror grupperas till vänster om valfri decimalpunkt

  • fac. thousands_sep avgör sekvensen som separerar grupper med siffror till vänster om valfri decimalpunkt

Om inga grupperingsbegränsningar införs av fac. gruppering (dess första element har värdet CHAR_MAX) och sedan inga instanser av fac. thousands_sep genereras i utdatafältet. Annars infogas avgränsare efter utskriftskonverteringen.

Den andra virtuella skyddade medlemsfunktionen:

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

beter sig på samma sätt som den första, förutom att den ersätter en konverteringsspecifikation för ld med lu.

Den tredje virtuella skyddade medlemsfunktionen:

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

beter sig på samma sätt som det första, förutom att det genererar ett flyttalsutdatafält från värdet för val. fac. decimal_point avgör sekvensen som skiljer heltalssiffrorna från bråksiffrorna. Motsvarande specifikation för utskriftskonvertering fastställs på följande sätt:

  • Om iosbase. flaggor och ios_base::floatfield == ios_base::fasta, konverteringsspecifikationen är lf.

  • Om iosbase. flaggor & ios_base::floatfield == ios_base::scientific, konverteringsspecifikationen är le. Om iosbase. flaggor och ios_base::versaler är ickezero, e ersätts med E.

  • Annars är konverteringsspecifikationen lg. Om iosbase. flags & ios_base::uppercase is nonzero, g is replaced with G.

Om iosbase. flaggor & ios_base::fixed är ickezero eller om iosbase. precision är större än noll, en precision med värdet iosbase. precisionen läggs till i konverteringsspecifikationen. Utfyllnad fungerar på samma sätt som för ett heltalsutdatafält. Utfyllnadstecknet är fyllt. Slutligen:

  • Om iosbase. flaggor och ios_base::showpos är ickezero, flaggan + är förberedd till konverteringsspecifikationen.

  • Om iosbase. flaggor och ios_base::showpoint är intezero, flaggan # förbereds för konverteringsspecifikationen.

Den fjärde virtuella skyddade medlemsfunktionen:

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

beter sig på samma sätt som den tredje, förutom att kvalificeraren l i konverteringsspecifikationen ersätts med L.

Den femte virtuella skyddade medlemsfunktionen:

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

beter sig på samma sätt den första, förutom att konverteringsspecifikationen är pplus alla kvalificerare som krävs för att ange utfyllnad.

Den sjätte virtuella skyddade medlemsfunktionen:

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

beter sig på samma sätt som det första, förutom att det genererar ett booleskt utdatafält från val.

Ett booleskt utdatafält har ett av två formulär. Om iosbase.flags & ios_base::boolalpha är falsereturnerar do_put(_Next, _Iosbase, _Fill, (long)val)medlemsfunktionen , som vanligtvis genererar en genererad sekvens med antingen 0 (för false) eller 1 (för true). Annars är den genererade sekvensen antingen fac. falsename (för false), eller fac.truename (för true).

Den sjunde virtuella skyddade medlemsfunktionen:

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

beter sig på samma sätt som den första, förutom att den ersätter en konverteringsspecifikation för ld med lld.

Den åttonde virtuella skyddade medlemsfunktionen:

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

beter sig på samma sätt som den första, förutom att den ersätter en konverteringsspecifikation för ld med llu.

Exempel

Se exemplet för put, som anropar do_put.

num_put::iter_type

En typ som beskriver en iterator för utdata.

typedef OutputIterator iter_type;

Anmärkningar

Typen är synonym för mallparametern OutputIterator.

num_put::num_put

Konstruktorn för objekt av typen num_put.

explicit num_put(size_t _Refs = 0);

Parameterar

_Refs
Heltalsvärde som används för att ange typ av minneshantering för objektet.

Anmärkningar

Möjliga värden för parametern _Refs och deras betydelse är:

  • 0: Objektets livslängd hanteras av de nationella inställningar som innehåller det.

  • 1: Objektets livslängd måste hanteras manuellt.

  • > 1: Dessa värden har inte definierats.

Inga direkta exempel är möjliga, eftersom destructor är skyddad.

Konstruktorn initierar sitt basobjekt med språkvarianten::facet(_ Refs).

num_put::p ut

Konverterar ett tal till en sekvens med CharTypes som representerar talet som är formaterat för ett visst språk.

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;

Parameterar

dest
En iterator som hanterar det första elementet i den infogade strängen.

_Iosbase
Angav den ström som innehåller nationella inställningar med den numpunct-fasetter som används för att punktera utdata och flaggor för formatering av utdata.

_Fylla
Ett tecken som används för avstånd.

val
Talet eller den booleska typen som ska matas ut.

Returvärde

En utdata iterator adresserar positionen en utöver det sista elementet som producerades.

Anmärkningar

Alla medlemsfunktioner returnerar do_put(next, _Iosbase, _Fill, val).

Exempel

// 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

Se även

<Locale>
fasetteringsklass
Trådsäkerhet i C++ Standard Library