money_get – třída
Šablona třídy popisuje objekt, který může sloužit jako omezující vlastnost národního prostředí pro řízení převodů sekvencí typu CharType
na peněžní hodnoty.
Syntaxe
template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class money_get : public locale::facet;
Parametry
CharType
Typ používaný v rámci programu ke kódování znaků v národním prostředí.
InputIterator
Typ iterátoru, ze kterého funkce get čtou svůj vstup.
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 |
---|---|
money_get | Konstruktor pro objekty typu money_get , které se používají k extrakci číselných hodnot ze sekvencí představujících peněžní hodnoty. |
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 vstupní iterátor. |
string_type | Typ, který popisuje řetězec obsahující znaky typu CharType . |
Členské funkce
Členová funkce | Popis |
---|---|
do_get | Virtuální funkce volaná k extrakci číselné hodnoty ze sekvence znaků, která představuje peněžní hodnotu. |
get | Extrahuje číselnou hodnotu ze sekvence znaků, která představuje peněžní hodnotu. |
Požadavky
Záhlaví:<národní prostředí>
Namespace: std
money_get::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 parametru šablony CharType.
money_get::d o_get
Virtuální funkce volána k extrahování číselné hodnoty ze sekvence znaků, která představuje peněžní hodnotu.
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
Parametry
první
Vstupní iterátor adresovaný začátek sekvence, který se má převést.
poslední
Vstupní iterátor adresovaný na konec sekvence, který se má převést.
Intl
Logická hodnota označující typ symbolu měny očekávaný v sekvenci: true
pokud mezinárodní, false
pokud je vnitrostátní.
Iosbase
Příznak formátu, který při nastavení označuje, že symbol měny je volitelný; v opačném případě se vyžaduje.
Kraj
Nastaví příslušné prvky masky bitů pro stav datového proudu podle toho, jestli operace proběhly úspěšně nebo ne.
Val
Řetězec, který ukládá převedenou sekvenci.
Návratová hodnota
Vstupní iterátor adresuje první prvek nad rámec pole peněžního vstupu.
Poznámky
První virtuální chráněná členová funkce se pokusí shodovat sekvenční prvky počínaje první v posloupnosti [ , first
last
), dokud nerozpozná úplné, neprázdné peněžní vstupní pole. V případě úspěchu převede toto pole na sekvenci jedné nebo více desetinných číslic, volitelně před znaménkem minus ( -
), aby představovalo množství a uloží výsledek do string_type objekt val. Vrátí iterátor označující první prvek nad rámec pole peněžního vstupu. V opačném případě funkce ukládá prázdnou sekvenci ve val a množinách ios_base::failbit
ve stavu. Vrátí iterátor označující první prvek nad rámec jakékoli předpony platného pole peněžního vstupu. V obou případech, pokud se návratová hodnota rovná last
, funkce se nastaví ios_base::eofbit
v State
.
Druhá virtuální chráněná členová funkce se chová stejně jako první, s tím rozdílem, že pokud je úspěšná, převede volitelně podepsanou posloupnost číslic na hodnotu typu long double
a uloží danou hodnotu ve val.
Formát peněžního vstupního pole je určen faset národního prostředívrácená efektivním voláním use_facet<moneypunct<CharType, intl>>( iosbase. getloc).
Konkrétně:
fac. neg_format určuje pořadí, ve kterém se vyskytují součásti pole.
fac. curr_symbol určuje posloupnost prvků, které tvoří symbol měny.
fac. positive_sign určuje posloupnost prvků, které tvoří kladné znaménko.
fac. negative_sign určuje posloupnost prvků, které tvoří záporné znaménko.
fac. seskupení určuje, jak se číslice seskupí nalevo od libovolné desetinné čárky.
fac. thousands_sep určuje prvek, který odděluje skupiny číslic vlevo od libovolné desetinné čárky.
fac. decimal_point určuje prvek, který odděluje celočíselné číslice od desetinných míst.
fac. frac_digits určuje počet významných desetinných míst vpravo od libovolné desetinné čárky. Při analýze peněžní částky s více desetinnými číslicemi, než
frac_digits
do_get
je volána , přestane analyzovat po spotřebě maximálněfrac_digits
znaků.
Pokud řetězec znaménka (fac. negative_sign
nebo fac. positive_sign
) má více než jeden prvek, je shodován pouze první prvek, kde se prvek rovná money_base::sign se zobrazí ve vzoru formátu ( fac. neg_format
). Všechny zbývající prvky se shodují na konci pole peněžního vstupu. Pokud žádný řetězec nemá první prvek, který odpovídá dalšímu prvku v poli peněžního vstupu, řetězec znaménka se převezme jako prázdný a znaménko je kladné.
Pokud iosbase. flags & showbase is nonzero, the string fac. curr_symbol
musí odpovídat tomu, kde se prvek rovná money_base::symbol v vzoru formátu. Jinak platí, že pokud money_base::symbol nastane na konci vzoru formátu a pokud žádné prvky znaménka nebudou odpovídat, symbol měny se neshoduje. Jinak se symbol měny volitelně shoduje.
Pokud žádné instance fac. thousands_sep
v části hodnot peněžního vstupního pole (kde se prvek, který se rovná money_base::value se zobrazí ve formátu), není uloženo žádné omezení seskupení. V opačném případě všechna omezení seskupení, která jsou stanovenafac. seskupování se vynucuje . Všimněte si, že výsledná sekvence číslic představuje celé číslo, jehož fac s nízkým pořadím. frac_digits
desetinné číslice jsou považovány za pravé od desetinné čárky.
Libovolné prázdné znaky se shodují s prvkem, který se rovná money_base::mezera se zobrazí ve vzoru formátu, pokud se zobrazí jinak než na konci vzoru formátu. Jinak se žádné vnitřní prázdné znaky neshodují. Prvek ch se považuje za prázdné, pokud use_facet<ctype<CharType>>( iosbase). getloc). is( ctype_base::space; ch) je true
.
Příklad
Podívejte se na příklad získání volání do_get
.
money_get::get
Extrahuje číselnou hodnotu ze sekvence znaků, která představuje peněžní hodnotu.
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;
Parametry
první
Vstupní iterátor adresovaný začátek sekvence, který se má převést.
poslední
Vstupní iterátor adresovaný na konec sekvence, který se má převést.
Intl
Logická hodnota označující typ symbolu měny očekávaný v sekvenci: true
pokud mezinárodní, false
pokud je vnitrostátní.
Iosbase
Příznak formátu, který při nastavení označuje, že symbol měny je volitelný; v opačném případě se vyžaduje
Kraj
Nastaví příslušné prvky bitové masky pro stav datového proudu podle toho, jestli operace proběhly úspěšně.
Val
Řetězec, který ukládá převedenou sekvenci.
Návratová hodnota
Vstupní iterátor adresuje první prvek nad rámec pole peněžního vstupu.
Poznámky
Obě členské funkce vrací do_get(first, last, Intl, Iosbase, State, val)
.
Příklad
// 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
Typ, který popisuje vstupní iterátor.
typedef InputIterator iter_type;
Poznámky
Typ je synonymem parametru šablony InputIterator.
money_get::money_get
Konstruktor pro objekty typu money_get
, které se používají k extrakci číselných hodnot ze sekvencí představujících peněžní hodnoty.
explicit money_get(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 národním prostředím::facet(_Refs).
money_get::string_type
Typ, který popisuje řetězec obsahující znaky typu CharType.
typedef basic_string<CharType, Traits, Allocator> string_type;
Poznámky
Typ popisuje specializaci šablony třídy basic_string.
Viz také
<locale>
facet – třída
Bezpečný přístup z více vláken ve standardní knihovně C++