Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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++