Sdílet prostřednictvím


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 longa 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 == 0je specifikace lipřevodu .

V opačném případě je specifikace ldpř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 [ , firstlast), 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:

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