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 CharType s, 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::basefield
ios_base::
== šestnáctkový, specifikace převodu je .lx
V opačném případě je specifikace
ld
př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::adjustfield
ios_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::floatfield
ios_base::
== vědecké, specifikace převodu je .le
Pokud iosbase. příznaky aios_base::
velká písmena jsou nenulová,e
je nahrazena znakemE
.Jinak je specifikace převodu lg. Pokud iosbase. příznaky & ios_base::velká písmena jsou nenulová,
g
je nahrazena znakemG
.
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 p
plus 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 CharType
s, 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++