Udostępnij za pośrednictwem


num_get — Klasa

Szablon klasy opisujący obiekt, który może służyć jako aspekt ustawień regionalnych do kontrolowania konwersji sekwencji typu CharType na wartości liczbowe.

Składnia

template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class num_get : public locale::facet;

Parametry

Typ char
Typ używany w programie do kodowania znaków w ustawieniach regionalnych.

InputIterator
Typ iteratora, z którego liczbowe funkcje get odczytują swoje dane wejściowe.

Uwagi

Podobnie jak w przypadku dowolnego zestawu reguł ustawień regionalnych, identyfikator obiektu statycznego ma początkową przechowywaną wartość zero. Pierwsza próba uzyskania dostępu do przechowywanej wartości przechowuje unikatową wartość dodatnią w identyfikatorze.

Konstruktory

Konstruktor opis
num_get Konstruktor dla obiektów typu num_get , które są używane do wyodrębniania wartości liczbowych z sekwencji.

Typedefs

Nazwa typu opis
char_type Typ opisujący znak używany przez ustawienie regionalne.
iter_type Typ, który opisuje iterator danych wejściowych.

Funkcje składowe

Funkcja składowa opis
do_get Funkcja wirtualna wywoływana w celu wyodrębniania wartości liczbowej lub logicznej z sekwencji znaków.
get Wyodrębnia wartość liczbową lub logiczną z sekwencji znaków.

Wymagania

Nagłówek:<ustawienia regionalne>

Przestrzeń nazw: std

num_get::char_type

Typ opisujący znak używany przez ustawienie regionalne.

typedef CharType char_type;

Uwagi

Typ jest synonimem parametru CharType szablonu.

num_get::d o_get

Funkcja wirtualna wywoływana w celu wyodrębniania wartości liczbowej lub logicznej z sekwencji znaków.

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

pierwszy
Początek zakresu znaków, od którego należy odczytać liczbę.

ostatni
Koniec zakresu znaków, z którego ma być odczytywany numer.

iosbase
Ios_base, którego flagi są używane przez konwersję.

state
Stan, do którego bit failbit (zobacz ios_base::iostate) jest dodawany po niepowodzeniu.

Val
Odczytywana wartość.

Wartość zwracana

Iterator po odczytaniu wartości.

Uwagi

Pierwsza funkcja wirtualnego chronionego elementu członkowskiego,

virtual iter_type do_get(
    iter_type first,
    iter_type last,
    ios_base& iosbase,
    ios_base::iostate& state,
    long& val) const;

Dopasuje elementy sekwencyjne rozpoczynające się na początku w sekwencji [first, last) , dopóki nie rozpozna kompletnego, nieistniejącego pola wejściowego liczby całkowitej. W przypadku pomyślnego przekonwertowania tego pola na równoważną wartość jako typ longi zapisuje wynik w wartości. Zwraca iterator wyznaczający pierwszy element poza polem danych wejściowych liczbowych. W przeciwnym razie funkcja nie przechowuje niczego w wartościach i ustawia w elemecie ios_base::failbit state. Zwraca iterator wyznaczający pierwszy element poza dowolnym prefiksem prawidłowego pola wejściowego liczby całkowitej. W obu przypadkach, jeśli zwracana wartość jest lastrówna , funkcja ustawia wartość ios_base::eofbit w .state

Pole wejściowe liczby całkowitej jest konwertowane przez te same reguły, które są używane przez funkcje skanowania do dopasowywania i konwertowania serii char elementów z pliku. (Przyjmuje się, że każdy taki char element jest mapowany na równoważny element typu Elem za pomocą prostego mapowania jeden do jednego). Równoważna specyfikacja konwersji skanowania jest określana w następujący sposób:

Jeśli iosbase.ios_base::flags() & ios_base::basefield == ios_base::oct, specyfikacja konwersji to lo.

Jeśli iosbase.flags() & ios_base::basefield == ios_base::szesnastkowy, specyfikacja konwersji to lx.

Jeśli iosbase.flags() & ios_base::basefield == 0parametr , specyfikacja konwersji to li.

W przeciwnym razie specyfikacja konwersji to ld.

Format pola wejściowego liczby całkowitej jest dodatkowo określany przez aspektfac ustawień regionalnych zwracany przez wywołanie use_facet numpunct<Elem>(iosbase.ios_base<::getloc()). Szczególnie:

fac.numpunct::grouping() określa sposób grupowania cyfr po lewej stronie dowolnego punktu dziesiętnego

fac.numpunct::thousands_sep() określa sekwencję oddzielającą grupy cyfr po lewej stronie dowolnego punktu dziesiętnego.

Jeśli w polu wejściowym liczbowym nie wystąpią żadne wystąpienia fac.thousands_sep() , żadne ograniczenie grupowania nie zostanie nałożone. W przeciwnym razie wszelkie ograniczenia grupowania nałożone przez program fac.grouping() są wymuszane, a separatory są usuwane przed rozpoczęciem konwersji skanowania.

Czwarta funkcja wirtualnego chronionego elementu członkowskiego:

virtual iter_type do_get(
    iter_type first,
    iter_type last,
    ios_base& iosbase,
    ios_base::iostate& state,
    unsigned long& val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że zastępuje specyfikację konwersji parametru ld lu. W przypadku pomyślnego przekonwertowania pola wejściowego liczbowego na wartość typu unsigned long i zapisuje ją w wartości val.

Piąta wirtualna chroniona funkcja składowa:

virtual iter_type do_get(
    iter_type first,
    iter_type last,
    ios_base& iosbase,
    ios_base::iostate& state,
    long long& val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że zastępuje specyfikację konwersji parametru ld lld. W przypadku pomyślnego przekonwertowania pola wejściowego liczbowego na wartość typu long long i zapisuje ją w wartości val.

Szósta funkcja wirtualnego chronionego elementu członkowskiego:

virtual iter_type do_get(
    iter_type first,
    iter_type last,
    ios_base& iosbase,
    ios_base::iostate& state,
    unsigned long long& val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że zastępuje specyfikację konwersji parametru ld llu. W przypadku pomyślnego przekonwertowania pola wejściowego liczbowego na wartość typu unsigned long long i zapisuje ją w wartości val.

Siódmy wirtualny element członkowski chroniony:

virtual iter_type do_get(
    iter_type first,
    iter_type last,
    ios_base& iosbase,
    ios_base::iostate& state,
    float& val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że stara się dopasować do kompletnego, nieistniejące pole wejściowe zmiennoprzecinkowe. fac.numpunct::d ecimal_point() określa sekwencję oddzielającą cyfry całkowite od cyfr ułamkowych. Odpowiedni specyfikator konwersji skanowania to lf.

Ósmy wirtualny element członkowski chroniony:

virtual iter_type do_get(
    iter_type first,
    iter_type last,
    ios_base& iosbase,
    ios_base::iostate& state,
    double& val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że stara się dopasować do kompletnego, nieistniejące pole wejściowe zmiennoprzecinkowe. fac.numpunct::d ecimal_point() określa sekwencję oddzielającą cyfry całkowite od cyfr ułamkowych. Odpowiedni specyfikator konwersji skanowania to lf.

Dziewiąta funkcja wirtualnego chronionego elementu członkowskiego:

virtual iter_type do_get(
    iter_type first,
    iter_type last,
    ios_base& iosbase,
    ios_base::iostate& state,
    long double& val) const;

zachowuje się tak samo jak ósmy, z tą różnicą, że równoważny specyfikator konwersji skanowania to Lf.

Dziesiąta funkcja wirtualnego chronionego elementu członkowskiego:

virtual iter_type do_get(
    iter_type first,
    iter_type last,
    ios_base& iosbase,
    ios_base::iostate& state,
    void *& val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że równoważny specyfikator konwersji skanowania to p.

Ostatnia (jedenasta) funkcja wirtualnego chronionego elementu członkowskiego:

virtual iter_type do_get(
    iter_type first,
    iter_type last,
    ios_base& iosbase,
    ios_base::iostate& state,
    bool& val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że podejmuje próbę dopasowania do kompletnego, niempty pola wejściowego wartości logicznej. W przypadku pomyślnego przekonwertowania pola wejściowego wartości logicznej na wartość typu bool i przechowuje ją w wartości val.

Pole wejściowe wartości logicznej przyjmuje jedną z dwóch formularzy. Jeśli iosbase.flags() & ios_base::wartość logiczna ma wartość false, jest taka sama jak pole wejściowe liczby całkowitej, z tą różnicą, że przekonwertowana wartość musi mieć wartość 0 (dla wartości false) lub 1 (dla wartości true). W przeciwnym razie sekwencja musi być zgodna z fac.ciągami numpunct::falsename() (dla wartości false) lub fac.numpunct::truename() (dla wartości true).

Przykład

Zobacz przykład get, gdzie funkcja wirtualnego elementu członkowskiego jest wywoływana przez do_get.

num_get::get

Wyodrębnia wartość liczbową lub logiczną z sekwencji znaków.

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

pierwszy
Początek zakresu znaków, od którego należy odczytać liczbę.

ostatni
Koniec zakresu znaków, z którego ma być odczytywany numer.

iosbase
Ios_base, którego flagi są używane przez konwersję.

state
Stan, do którego bit failbit (zobacz ios_base::iostate) jest dodawany po niepowodzeniu.

Val
Odczytywana wartość.

Wartość zwracana

Iterator po odczytaniu wartości.

Uwagi

Wszystkie funkcje składowe zwracają do_get( first, last, iosbase, state, val).

Pierwsza wirtualna chroniona funkcja składowa próbuje dopasować elementy sekwencyjne rozpoczynające się na początku w sekwencji [ first, last), dopóki nie rozpozna kompletnego, brak liczby całkowitej pola wejściowego. W przypadku pomyślnego przekonwertowania tego pola na równoważną wartość jako typ long i zapisuje wynik w wartości. Zwraca iterator wyznaczający pierwszy element poza polem danych wejściowych liczbowych. W przeciwnym razie funkcja nie przechowuje niczego w wartości i ustawia ios_base::failbit w stanie. Zwraca iterator wyznaczający pierwszy element poza dowolnym prefiksem prawidłowego pola wejściowego liczby całkowitej. W obu przypadkach, jeśli wartość zwracana jest ostatnia, funkcja ustawia ios_base::eofbit stan.

Pole wejściowe liczby całkowitej jest konwertowane przez te same reguły, które są używane przez funkcje skanowania do dopasowywania i konwertowania serii char elementów z pliku. Zakłada się, że każdy taki char element jest mapowany na równoważny element typu CharType za pomocą prostego mapowania jeden do jednego. Równoważna specyfikacja konwersji skanowania jest określana w następujący sposób:

  • Jeśli iosbase.flagi& ios_base::basefield == ios_base::okt, specyfikacja konwersji to lo.

  • Jeśli iosbase.flags & ios_base::basefield == ios_base::szesnastkowy, specyfikacja konwersji to lx.

  • Jeśli iosbase.flags & ios_base::basefield == 0parametr , specyfikacja konwersji to li.

  • W przeciwnym razie specyfikacja konwersji to ld.

Format pola wejściowego liczby całkowitej jest dodatkowo określany przez aspekt fac ustawień regionalnych zwracany przez wywołanie use_facet<numpunct<Elem>(iosbase.getloc.()) Szczególnie:

  • fac.grupowanie określa sposób grupowania cyfr po lewej stronie dowolnego punktu dziesiętnego.

  • fac. thousands_sep określa sekwencję oddzielającą grupy cyfr po lewej stronie dowolnego punktu dziesiętnego.

Jeśli w polu wejściowym liczbowym nie wystąpią żadne wystąpienia fac.thousands_sep , żadne ograniczenie grupowania nie zostanie nałożone. W przeciwnym razie wszelkie ograniczenia grupowania nałożone przez program fac.grouping są wymuszane, a separatory są usuwane przed konwersją skanowania.

Druga funkcja wirtualnego chronionego elementu członkowskiego:

virtual iter_type do_get(iter_type first,
    iter_type last,
    ios_base& iosbase,
    ios_base::iostate& state,
    unsigned long& val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że zastępuje specyfikację konwersji parametru ld lu. W przypadku pomyślnego przekonwertowania pola wejściowego liczbowego na wartość typu unsigned long i przechowuje ją w wartości val.

Trzecia wirtualna chroniona funkcja składowa:

virtual iter_type do_get(iter_type first,
    iter_type last,
    ios_base& iosbase,
    ios_base::iostate& state,
    double& val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że próbuje dopasować pełne, nieistniejące pole wejściowe zmiennoprzecinkowe. fac. decimal_point określa sekwencję oddzielającą cyfry całkowite od cyfr ułamkowych. Odpowiedni specyfikator konwersji skanowania to lf.

Czwarta funkcja wirtualnego chronionego elementu członkowskiego:

virtual iter_type do_get(iter_type first,
    iter_type last,
    ios_base& iosbase,
    ios_base::iostate& state,
    long double& val) const;

zachowuje się tak samo jak trzeci, z tą różnicą, że równoważny specyfikator konwersji skanowania to Lf.

Piąta wirtualna chroniona funkcja składowa:

virtual iter_type do_get(iter_type first,
    iter_type last,
    ios_base& iosbase,
    ios_base::iostate& state,
    void *& val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że równoważny specyfikator konwersji skanowania to p.

Szósta funkcja wirtualnego chronionego elementu członkowskiego:

virtual iter_type do_get(iter_type first,
    iter_type last,
    ios_base& iosbase,
    ios_base::iostate& state,
    bool& val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że próbuje dopasować pełne, nieistniejące pole wejściowe wartości logicznej. W przypadku pomyślnego przekonwertowania pola wejściowego wartości logicznej na wartość typu bool i przechowuje ją w wartości val.

Pole wejściowe wartości logicznej przyjmuje jedną z dwóch form. Jeśli iosbase.flags & ios_base::wartość logiczna to false, jest to samo co pole wejściowe liczby całkowitej, z tą różnicą, że przekonwertowana wartość musi mieć wartość 0 (dla false) lub 1 (dla true). W przeciwnym razie sekwencja musi być zgodna z fac.nazwą falsename (dla false), lubfac. truename (dla true).

Przykład

// 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, który opisuje iterator danych wejściowych.

typedef InputIterator iter_type;

Uwagi

Typ jest synonimem parametru InputIteratorszablonu .

num_get::num_get

Konstruktor dla obiektów typu num_get , które są używane do wyodrębniania wartości liczbowych z sekwencji.

explicit num_get(size_t refs = 0);

Parametry

Bibl.
Wartość całkowita używana do określania typu zarządzania pamięcią dla obiektu.

Uwagi

Możliwe wartości parametru refs i ich istotności to:

  • 0: Okres istnienia obiektu jest zarządzany przez ustawienia regionalne, które go zawierają.

  • 1: Okres istnienia obiektu musi być zarządzany ręcznie.

  • > 1: Te wartości nie są zdefiniowane.

Nie są możliwe żadne bezpośrednie przykłady, ponieważ destruktor jest chroniony.

Konstruktor inicjuje swój obiekt podstawowy z aspektemlocale::(refs).

Zobacz też

<ustawienia regionalne>
facet, klasa
Bezpieczeństwo wątku w standardowej bibliotece C++