Sdílet prostřednictvím


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 [ , firstlast), 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_digitsdo_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++