Sdílet prostřednictvím


num_put – třída

Šablona třídy, která popisuje objekt, který může sloužit jako omezující vlastnost národního prostředí k řízení převodů číselných hodnot na sekvence typu CharType.

Syntaxe

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

Parametry

CharType
Typ používaný v rámci programu ke kódování znaků v národním prostředí.

OutputIterator
Typ iterátoru, do kterého číselné funkce zapisují svůj výstup.

Poznámky

Stejně jako u omezující vlastnosti národního prostředí má ID statického objektu počáteční uloženou hodnotu nula. První pokus o přístup k uložené hodnotě ukládá jedinečnou kladnou hodnotu v ID.

Konstruktory

Konstruktor Popis
num_put Konstruktor pro objekty typu num_put.

Typedefs

Název typu Popis
char_type Typ, který se používá k popisu znaku používaného národním prostředním.
iter_type Typ, který popisuje výstupní iterátor.

Členské funkce

Členová funkce Popis
do_put Virtuální funkce, která je volána k převodu čísla na sekvenci CharType, která představuje číslo formátované pro dané národní prostředí.
dát Převede číslo na posloupnost CharTypes, která představuje číslo formátované pro dané národní prostředí.

Požadavky

Záhlaví:<národní prostředí>

Obor názvů: std

num_put::char_type

Typ, který se používá k popisu znaku používaného národním prostředním.

typedef CharType char_type;

Poznámky

Typ je synonymem pro parametr CharTypešablony .

num_put::d o_put

Virtuální funkce, která je volána k převodu čísla na sekvenci CharType, která představuje číslo formátované pro dané národní prostředí.

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;

Parametry

další
Iterátor adresuje první prvek vloženého řetězce.

_Iosbase
Zadali jste datový proud, který obsahuje národní prostředí s fasetou numpunct použitou k interpunkci výstupu a příznaků pro formátování výstupu.

_Vyplnit
Znak, který se používá pro mezery.

Val
Jedná se o typ čísla nebo logické hodnoty, který má být výstupem.

Návratová hodnota

Výstupní iterátor adresuje pozici za posledním vytvořeným prvkem.

Poznámky

První virtuální chráněná členová funkce generuje sekvenční prvky začínající vedle, aby vytvořilo celočíselné výstupní pole z hodnoty val. Funkce vrátí iterátor označující další místo pro vložení prvku mimo vygenerované celočíselné výstupní pole.

Výstupní pole celého čísla je generováno stejnými pravidly, která používají tiskové funkce pro generování řady char prvků do souboru. Každý takový znak element se předpokládá, že mapuje na ekvivalentní prvek typu CharType jednoduchým mapováním 1:1. Pokud funkce tisku vloží pole s mezerami nebo číslicí 0, do_put ale místo toho použije fill. Ekvivalentní specifikace převodu tisku je určena následujícím způsobem:

  • Pokud iosbase. příznaky &ios_base:: == ios_base::basefield oct, specifikace převodu je .lo

  • Pokud iosbase.flags & ios_base::basefieldios_base:: == šestnáctkový, specifikace převodu je .lx

  • V opačném případě je specifikace ldpřevodu .

Pokud iosbase. width is nonzero, a field width of this value is prepended. Funkce pak volá iosbase. width(0) pro resetování šířky pole na nulu.

Odsazení nastane pouze v případě, že minimální počet prvků N potřebných k zadání výstupního pole je menší než iosbase. šířka. Takové odsazení se skládá z posloupnosti kopií výplně s N - šířkou. Odsazení pak proběhne takto:

  • Pokud iosbase. příznaky &ios_base:: == ios_base::adjustfield vlevo, příznak - je předpnut. (Odsazení nastane po vygenerovaném textu.)

  • Pokud iosbase.flags & ios_base::adjustfieldios_base:: == vnitřní, příznak 0 je předpnut. (U číselného výstupního pole dochází k odsazení tam, kde je panel funkcí tisku s 0.)

  • Jinak není předem žádný další příznak. (Odsazení nastane před vygenerovanou sekvencí.)

Nakonec:

  • Pokud iosbase. příznaky a ios_base::showpos jsou nenulové, příznak + je předpnut ke specifikaci převodu.

  • Pokud iosbase. příznaky & ios_base::showbase je nenulové, příznak # je předpnut ke specifikaci převodu.

Formát celočíselného výstupního pole je dále určen fasetou národního prostředí vrácenou voláním use_facet<numpunct<Elem>( iosbase). getloc). Konkrétně:

  • fac. seskupení určuje, jak se číslice seskupí nalevo od libovolné desetinné čárky.

  • fac. thousands_sep určuje posloupnost, která odděluje skupiny číslic nalevo od libovolné desetinné čárky.

Pokud nejsou fac stanovena žádná omezení seskupení. seskupení (jeho první prvek má hodnotu CHAR_MAX), pak žádné instance fac. thousands_sep jsou generovány ve výstupním poli. V opačném případě se oddělovače vloží po provedení převodu tisku.

Druhá virtuální chráněná členová funkce:

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

se chová stejně jako první, s tím rozdílem, že nahrazuje specifikaci převodu ld .lu

Třetí virtuální chráněná členová funkce:

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

chová se stejně jako první, s tím rozdílem, že vytváří výstupní pole s plovoucí desetinnou čárkou z hodnoty val. fac. decimal_point určuje sekvenci, která odděluje celočíselné číslice od desetinných míst. Ekvivalentní specifikace převodu tisku je určena následujícím způsobem:

  • Pokud iosbase. příznaky &ios_base:: == ios_base::floatfield pevné, specifikace převodu je .lf

  • Pokud iosbase. příznaky & ios_base::floatfieldios_base:: == vědecké, specifikace převodu je .le Pokud iosbase. příznaky a ios_base::velká písmena jsou nenulová, e je nahrazena znakem E.

  • Jinak je specifikace převodu lg. Pokud iosbase. příznaky & ios_base::velká písmena jsou nenulová, g je nahrazena znakem G.

Pokud iosbase. příznaky &ios_base::fixed je nenulové nebo pokud iosbase. přesnost je větší než nula, přesnost s hodnotou iosbase. přesnost se předepisuje specifikaci převodu. Všechny odsazení se chovají stejně jako u celočíselného výstupního pole. Znak odsazení je vyplněný. Nakonec:

  • Pokud iosbase. příznaky a ios_base::showpos jsou nenulové, příznak + je předpnut ke specifikaci převodu.

  • Pokud iosbase. příznaky a ios_base::showpoint jsou nenulové, příznak # je předepisován specifikaci převodu.

Čtvrtá virtuální chráněná členová funkce:

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

se chová stejně jako třetí, s výjimkou toho, že kvalifikátor l ve specifikaci převodu je nahrazen L.

Pátá virtuální chráněná členová funkce:

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

chová se stejně jako první, s tím rozdílem, že specifikace převodu je pplus jakýkoli kvalifikátor potřebný k určení odsazení.

Šestá virtuální chráněná členová funkce:

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

chová se stejně jako první, s tím rozdílem, že generuje logické výstupní pole z val.

Logické výstupní pole má jednu ze dvou forem. Pokud iosbase.flags & ios_base::je boolalpha , vrátí do_put(_Next, _Iosbase, _Fill, (long)val)členová funkce , která obvykle vytvoří vygenerovanou sekvenci 0 (profalse) nebo 1 (protrue).false V opačném případě je vygenerovaná sekvence buď fac.falsename (for false) nebo fac.truename (for true).

Sedmá virtuální chráněná členová funkce:

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

se chová stejně jako první, s tím rozdílem, že nahrazuje specifikaci převodu ld .lld

Osmá virtuální chráněná členová funkce:

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

se chová stejně jako první, s tím rozdílem, že nahrazuje specifikaci převodu ld .llu

Příklad

Podívejte se na příklad pro vložení, který volá do_put.

num_put::iter_type

Typ, který popisuje výstupní iterátor.

typedef OutputIterator iter_type;

Poznámky

Typ je synonymem pro outputIterator parametru šablony.

num_put::num_put

Konstruktor pro objekty typu num_put.

explicit num_put(size_t _Refs = 0);

Parametry

_Refs
Celočíselná hodnota použitá k určení typu správy paměti pro objekt.

Poznámky

Možné hodnoty pro parametr _Refs a jejich významnost jsou:

  • 0: Životnost objektu je spravována národními prostředími, které ho obsahují.

  • 1: Životnost objektu musí být spravována ručně.

  • > 1: Tyto hodnoty nejsou definovány.

Nejsou možné žádné přímé příklady, protože destruktor je chráněn.

Konstruktor inicializuje svůj základní objekt s locale::facet(_ Refs).

num_put::p ut

Převede číslo na posloupnost CharTypes, která představuje číslo formátované pro dané národní prostředí.

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;

Parametry

dest
Iterátor adresuje první prvek vloženého řetězce.

_Iosbase
Zadali jste datový proud, který obsahuje národní prostředí s fazetou numpunct použitou k interpunkci výstupu a příznaků pro formátování výstupu.

_Vyplnit
Znak, který se používá pro mezery.

Val
Jedná se o typ čísla nebo logické hodnoty, který má být výstupem.

Návratová hodnota

Výstupní iterátor adresuje pozici za posledním vytvořeným prvkem.

Poznámky

Všechny členské funkce vrací do_put( next, _Iosbase, _Fill, val).

Příklad

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

Viz také

<locale>
facet – třída
Bezpečný přístup z více vláken ve standardní knihovně C++