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 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ś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 last
ró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 == 0
parametr , 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 tolo
.Jeśli
iosbase.flags & ios_base::basefield == ios_base::
szesnastkowy, specyfikacja konwersji tolx
.Jeśli
iosbase.flags & ios_base::basefield == 0
parametr , specyfikacja konwersji toli
.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 InputIterator
szablonu .
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++