num_get – třída
Šablona třídy, která popisuje objekt, který může sloužit jako omezující vlastnost národního prostředí pro řízení převodů sekvencí typu CharType
na číselné hodnoty.
Syntaxe
template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class num_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 číselné 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 |
---|---|
num_get | Konstruktor pro objekty typu num_get , které se používají k extrakci číselných hodnot ze sekvencí. |
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. |
Členské funkce
Členová funkce | Popis |
---|---|
do_get | Virtuální funkce volaná k extrakci číselné hodnoty nebo logické hodnoty ze sekvence znaků. |
get | Extrahuje ze sekvence znaků číselnou nebo logickou hodnotu. |
Požadavky
Záhlaví:<národní prostředí>
Obor názvů: std
num_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.
num_get::d o_get
Virtuální funkce volaná k extrakci číselné hodnoty nebo logické hodnoty ze sekvence znaků.
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned short& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned int& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
Parametry
první
Začátek rozsahu znaků, ze kterých se má číslo přečíst.
poslední
Konec rozsahu znaků, ze kterých se má číslo přečíst.
iosbase
Ios_base, jejíž příznaky jsou používány převodem.
state
Stav, do kterého dojde k selhání (viz ios_base::iostate), se přidá při selhání.
Val
Hodnota, která byla přečtená.
Návratová hodnota
Iterátor po přečtení hodnoty.
Poznámky
První virtuální chráněná členová funkce,
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
odpovídá sekvenčním prvkům začínajícím na prvním místě v sekvenci [first, last)
, dokud nerozpozná úplné celočíselné vstupní pole. V případě úspěchu převede toto pole na ekvivalentní hodnotu jako typ long
a uloží výsledek do hodnoty val. Vrátí iterátor označující první prvek nad číselné vstupní pole. V opačném případě funkce ukládá nic do val a množin ios_base::failbit
v state
. Vrátí iterátor označující první prvek nad rámec jakékoli předpony platného celočíselného vstupního pole. V obou případech, pokud se návratová hodnota rovná last
, funkce se nastaví ios_base::eofbit
v state
.
Celočíselné vstupní pole je převedeno stejnými pravidly, která používají funkce vyhledávání pro porovnávání a převod řady char
prvků ze souboru. (Každý takový char
prvek se předpokládá, že se mapuje na ekvivalentní prvek typu Elem
jednoduchým mapováním 1:1.) Ekvivalentní specifikace převodu skenování je určena následujícím způsobem:
Pokud iosbase.
ios_base::flags() & ios_base::basefield == ios_base::
oct, specifikace převodu je lo
.
Pokud iosbase.flags() & ios_base::basefield == ios_base::
je šestnáctkový, specifikace převodu je lx
.
Pokud iosbase.flags() & ios_base::basefield == 0
je specifikace li
převodu .
V opačném případě je specifikace ld
převodu .
Formát celočíselného vstupního pole je dále určen omezující vlastnostífac
národního prostředí vrácenou voláním use_facet <
číslopunct<Elem>(iosbase.
ios_base::getloc.())
Konkrétně:
fac.
numpunct::grouping()
určuje, jak se číslice seskupí nalevo od libovolné desetinné čárky.
fac.
numpunct::thousands_sep()
určuje sekvenci, která odděluje skupiny číslic nalevo od libovolné desetinné čárky.
Pokud v číselném vstupním poli nedojde k žádným instancím fac.thousands_sep()
, není vynuceno žádné omezení seskupení. Jinak se vynucují všechna omezení seskupení, která jsou vynucena fac.grouping()
, a oddělovače se odeberou před převodem kontroly.
Čtvrtá virtuální chráněná členová funkce:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
se chová stejně jako první, s tím rozdílem, že nahrazuje specifikaci převodu ld
.lu
V případě úspěchu převede číselné vstupní pole na hodnotu typu unsigned long
a uloží ji do hodnoty val.
Pátá virtuální chráněná členová funkce:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
se chová stejně jako první, s tím rozdílem, že nahrazuje specifikaci převodu ld
.lld
V případě úspěchu převede číselné vstupní pole na hodnotu typu long long
a uloží ji do hodnoty val.
Šestá virtuální chráněná členová funkce:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
se chová stejně jako první, s tím rozdílem, že nahrazuje specifikaci převodu ld
.llu
V případě úspěchu převede číselné vstupní pole na hodnotu typu unsigned long long
a uloží ji do hodnoty val.
Sedmá virtuální chráněná členová funkce:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
chová se stejně jako první, s tím rozdílem, že se snaží shodovat s úplným, neprázdným vstupním polem s plovoucí desetinou čárkou. fac.
numpunct::d ecimal_point()
určuje sekvenci, která odděluje celočíselné číslice od desetinných míst. Ekvivalentní specifikátor převodu skenování je lf
.
Osmá virtuální chráněná členová funkce:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
chová se stejně jako první, s tím rozdílem, že se snaží shodovat s úplným, neprázdným vstupním polem s plovoucí desetinou čárkou. fac.
numpunct::d ecimal_point()
určuje sekvenci, která odděluje celočíselné číslice od desetinných míst. Ekvivalentní specifikátor převodu skenování je lf
.
Devátá virtuální chráněná členová funkce:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
chová se stejně jako osmá, s tím rozdílem, že ekvivalentní specifikátor převodu skenování je Lf
.
Desátá virtuální chráněná členská funkce:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
chová se stejně jako první, s tím rozdílem, že ekvivalentní specifikátor převodu skenování je p
.
Poslední (jedenáctá) virtuální chráněná členová funkce:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
chová se stejně jako první, s tím rozdílem, že se snaží shodovat s úplným, neprázdným logickým vstupním polem. V případě úspěchu převede logické vstupní pole na hodnotu typu bool
a uloží ji do hodnoty val.
Logické vstupní pole má jednu ze dvou forem. Pokud iosbase.flags() & ios_base::
je boolalpha false, je to stejné jako celočíselné vstupní pole s tím rozdílem, že převedená hodnota musí být buď 0 (pro false), nebo 1 (pro true). V opačném případě musí sekvence odpovídat fac.
numpunct::falsename()
(pro false) nebo fac.
numpunct::truename()
(pro true).
Příklad
Podívejte se na příklad get, kde virtuální člen funkce je volána do_get
.
num_get::get
Extrahuje ze sekvence znaků číselnou nebo logickou hodnotu.
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned short& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned int& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
Parametry
první
Začátek rozsahu znaků, ze kterých se má číslo přečíst.
poslední
Konec rozsahu znaků, ze kterých se má číslo přečíst.
iosbase
Ios_base, jejíž příznaky jsou používány převodem.
state
Stav, do kterého dojde k selhání (viz ios_base::iostate), se přidá při selhání.
Val
Hodnota, která byla přečtená.
Návratová hodnota
Iterátor po přečtení hodnoty.
Poznámky
Všechny členské funkce vrací do_get( first, last, iosbase, state, val)
.
První virtuální chráněná členová funkce se pokusí shodovat sekvenční prvky začínající na prvním místě v sekvenci [ , first
last
), dokud nerozpozná úplné, neprázdné celé celé číslo vstupní pole. Pokud bude úspěšné, převede toto pole na ekvivalentní hodnotu jako typ long
a uloží výsledek do hodnoty val. Vrátí iterátor označující první prvek nad číselné vstupní pole. V opačném případě funkce ukládá nic ve stavu val a setios_base::failbit
. Vrátí iterátor označující první prvek nad rámec jakékoli předpony platného celočíselného vstupního pole. V obou případech platí, že pokud se vrácená hodnota rovná poslední, funkce se nastaví ios_base::eofbit
ve stavu.
Celočíselné vstupní pole je převedeno stejnými pravidly, která používají funkce vyhledávání pro porovnávání a převod řady char
prvků ze souboru. Každý takový char
prvek se předpokládá, že mapuje na ekvivalentní prvek typu CharType
jednoduchým mapováním 1:1. Ekvivalentní specifikace převodu skenování je určena následujícím způsobem:
Pokud
iosbase.
příznaky& ios_base::basefield == ios_base::
oct, specifikace převodu je .lo
Pokud
iosbase.flags & ios_base::basefield == ios_base::
je šestnáctkový, specifikace převodu jelx
.Pokud
iosbase.flags & ios_base::basefield == 0
je specifikaceli
převodu .V opačném případě je specifikace
ld
převodu .
Formát celočíselného vstupního pole je dále určen omezující vlastností fac
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 v číselném vstupním poli nedojde k žádným instancím fac.thousands_sep
, není vynuceno žádné omezení seskupení. Jinak se vynucují všechna omezení seskupení, která jsou vynucena fac.grouping
, a oddělovače se odeberou před převodem kontroly.
Druhá virtuální chráněná členová funkce:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
se chová stejně jako první, s tím rozdílem, že nahrazuje specifikaci převodu ld
.lu
V případě úspěchu převede číselné vstupní pole na hodnotu typu unsigned long
a uloží ji do hodnoty val.
Třetí virtuální chráněná členová funkce:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
chová se stejně jako první, s tím rozdílem, že se pokusí shodovat s úplným, neprázdným vstupním polem s plovoucí desetinou čárkou. fac.
decimal_point určuje sekvenci, která odděluje celočíselné číslice od desetinných míst. Ekvivalentní specifikátor převodu skenování je lf
.
Čtvrtá virtuální chráněná členová funkce:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
se chová stejně jako třetí, s tím rozdílem, že ekvivalentní specifikátor převodu skenování je Lf
.
Pátá virtuální chráněná členová funkce:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
chová se stejně jako první, s tím rozdílem, že ekvivalentní specifikátor převodu skenování je p
.
Šestá virtuální chráněná členová funkce:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
chová se stejně jako první, s tím rozdílem, že se pokusí shodovat s úplným logickým vstupním polem, které není logické. V případě úspěchu převede logické vstupní pole na hodnotu typu bool
a uloží ji do hodnoty val.
Logické vstupní pole má jednu ze dvou forem. Pokud iosbase.flags & ios_base::
je boolalpha , je to stejné jako celočíselné vstupní pole s tím rozdílem, že převedená hodnota musí být buď 0 (profalse
) nebo 1 (protrue
).false
Jinak se sekvence musí shodovat s fac.
falsename (forfalse
) nebofac.
truename (fortrue
).
Příklad
// num_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, psz2;
psz << "-1000,56";
ios_base::iostate st = 0;
long double fVal;
cout << use_facet <numpunct <char> >(loc).thousands_sep( ) << endl;
psz.imbue( loc );
use_facet <num_get <char> >
(loc).get( basic_istream<char>::_Iter( psz.rdbuf( ) ),
basic_istream<char>::_Iter(0), psz, st, fVal );
if ( st & ios_base::failbit )
cout << "money_get( ) FAILED" << endl;
else
cout << "money_get( ) = " << fVal << endl;
}
num_get::iter_type
Typ, který popisuje vstupní iterátor.
typedef InputIterator iter_type;
Poznámky
Typ je synonymem pro parametr InputIterator
šablony .
num_get::num_get
Konstruktor pro objekty typu num_get
, které se používají k extrakci číselných hodnot ze sekvencí.
explicit num_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 parametru refs a jejich významnosti 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 fasetoulocale::
(refs)
.
Viz také
<locale>
facet – třída
Bezpečný přístup z více vláken ve standardní knihovně C++