num_get-Klasse
Eine Klassenvorlage, die ein Objekt beschreibt, das als Gebietsschema-Facet dienen kann, um Konvertierungen von Sequenzen vom Typ CharType
in numerische Werte zu steuern.
Syntax
template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class num_get : public locale::facet;
Parameter
CharType
Der Typ, der innerhalb eines Programms zum Codieren von Zeichen in einem Gebietsschema verwendet wird.
InputIterator
Der Typ des Iterators, von dem die numerische get-Funktionen ihre Eingabe lesen.
Hinweise
Wie bei jedem Gebietsschemafacet hat die statische Objekt-ID einen anfänglichen gespeicherten Wert von NULL. Beim ersten Versuch, auf den gespeicherten Wert zuzugreifen, wird in id ein eindeutiger positiver Wert gespeichert.
Konstruktoren
Konstruktor | Beschreibung |
---|---|
num_get | Der Konstruktor für Objekte vom Typ num_get , die verwendet werden, um numerische Werte aus Sequenzen zu extrahieren. |
TypeDefs
Typname | Beschreibung |
---|---|
char_type | Ein Typ, mit dem ein Zeichen beschrieben wird, das von einem Gebietsschema verwendet wird. |
iter_type | Ein Typ, der einen Eingabeiterator beschreibt. |
Memberfunktionen
Memberfunktion | Beschreibung |
---|---|
do_get | Eine virtuelle Funktion, die aufgerufen wird, um einen numerischen oder booleschen Wert aus einer Zeichenfolge aufzurufen. |
get | Extrahiert einen numerischen oder booleschen Wert aus einer Zeichenfolge. |
Anforderungen
Header:<locale>
Namespace: std
num_get::char_type
Ein Typ, mit dem ein Zeichen beschrieben wird, das von einem Gebietsschema verwendet wird.
typedef CharType char_type;
Hinweise
Der Typ stellt ein Synonym für den Vorlagenparameter CharType dar.
num_get::d o_get
Eine virtuelle Funktion, die aufgerufen wird, um einen numerischen oder booleschen Wert aus einer Zeichenfolge aufzurufen.
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;
Parameter
first
Der Anfang des Zeichenbereichs, aus dem die Zahl gelesen wird.
last
Das Ende des Zeichenbereichs, aus dem die Zahl gelesen wird.
iosbase
Die ios_base, deren Flags durch die Konvertierung verwendet werden.
state
Der Zustand, zu dem die Failbit (siehe ios_base:: iostate) bei einem Fehler hinzugefügt wird.
val
Der gelesene Wert.
Rückgabewert
Der Iterator, nachdem der Wert gelesen wurde.
Hinweise
Die erste virtuelle geschützte Member-Funktion
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long& val) const;
gleicht sequenzielle Elemente ab, die zuerst in der Sequenz [first, last)
beginnen, bis es ein vollständiges ganzzahliges Eingabefeld erkannt hat. Bei erfolgreicher Ausführung konvertiert es dieses Feld in seinen entsprechenden Wert als Typ long
und speichert das Ergebnis in Val. Sie gibt einen Iterator zurück, der das erste Element nach dem numerischen Eingabefeld festlegt. Andernfalls speichert die Funktion nichts im Wert und legt sie ios_base::failbit
fest in state
. Sie gibt einen Iterator zurück, der das erste Element nach jedem Präfix eines gültigen Eingabefelds für ganze Zahlen festlegt. In beiden Fällen legt die Funktion, wenn der Rückgabewert last
ist, ios_base::eofbit
auf state
fest.
Das Eingabefeld für die ganze Zahl wird konvertiert, indem die gleichen Regeln, die von den Überprüfungsfunktionen für den Abgleich und das Konvertieren einer Reihe von char
-Elemente aus einer Datei genutzt wurden, angewendet werden. (Jedes solche char
Element wird angenommen, um ein entsprechendes Element vom Typ Elem
durch eine einfache 1:1-Zuordnung zuzuordnen.) Die entsprechende Scankonvertierungsspezifikation wird wie folgt bestimmt:
Wenn iosbase.
ios_base::flags() & ios_base::basefield == ios_base::
oct, ist die Konvertierungsspezifikation lo
.
Wenn iosbase.flags() & ios_base::basefield == ios_base::
hex, ist die Konvertierungsspezifikation lx
.
Wenn iosbase.flags() & ios_base::basefield == 0
, ist die Konvertierungsspezifikation li
.
Andernfalls ist die Konvertierungsspezifikation ld
.
Das Format eines ganzzahligen Eingabefelds wird weiter durch das Gebietsschema-Facet bestimmt, das vom Aufruf use_facet numpunct<Elem>(iosbase.
ios_base<
::getloc())
zurückgegeben wird.fac
Speziell:
fac.
numpunct::grouping()
bestimmt, wie Ziffern auf der linken Seite des Dezimaltrennzeichens gruppiert werden.
fac.
numpunct::thousands_sep()
bestimmt die Sequenz, die Gruppen von Ziffern auf der linken Seite eines Dezimaltrennzeichens trennt.
Wenn keine Instanzen von fac.thousands_sep()
im numerischen Eingabefeld auftreten, wird keine Gruppierungseinschränkung auferlegt. Andernfalls werden alle von fac.grouping()
auferlegten Gruppierungseinschränkung erzwungen und Trennzeichen werden entfernt, bevor die Überprüfungskonvertierung auftritt.
Die vierte virtuelle geschützte Member-Funktion:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
verhält sich wie die erste, außer dass sie eine Konvertierungsspezifikation von ld
durch lu
ersetzt. Bei erfolgreicher Konvertierung wird das numerische Eingabefeld in einen Wert vom Typ unsigned long
konvertiert und dieser Wert im Wert gespeichert.
Die fünfte virtuelle geschützte Memberfunktion:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long long& val) const;
verhält sich wie die erste, außer dass sie eine Konvertierungsspezifikation von ld
durch lld
ersetzt. Bei erfolgreicher Konvertierung wird das numerische Eingabefeld in einen Wert vom Typ long long
konvertiert und dieser Wert im Wert gespeichert.
Die sechste virtuelle geschützte Memberfunktion:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long long& val) const;
verhält sich wie die erste, außer dass sie eine Konvertierungsspezifikation von ld
durch llu
ersetzt. Bei erfolgreicher Konvertierung wird das numerische Eingabefeld in einen Wert vom Typ unsigned long long
konvertiert und dieser Wert im Wert gespeichert.
Die siebte virtuelle geschützte Member-Funktion:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
float& val) const;
verhält sich wie die erste, außer dass sie versucht, eine Übereinstimmung für ein vollständiges, nicht leeres Gleitkommaeingabefeld zu finden. fac.
numpunct::decimal_point()
bestimmt die Sequenz, die ganzzahlige Ziffern von Bruchziffern trennt. Der entsprechende Überprüfungsonvertierungsspezifizierer ist lf
.
Die achte virtuelle geschützte Member-Funktion:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
verhält sich wie die erste, außer dass sie versucht, eine Übereinstimmung für ein vollständiges, nicht leeres Gleitkommaeingabefeld zu finden. fac.
numpunct::decimal_point()
bestimmt die Sequenz, die ganzzahlige Ziffern von Bruchziffern trennt. Der entsprechende Überprüfungsonvertierungsspezifizierer ist lf
.
Die neunte virtuelle geschützte Member-Funktion:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
verhält sich wie das achte, außer dass der entsprechende Überprüfungskonvertierungsspezifizierer Lf
ist.
Die zehnte virtuelle geschützte Memberfunktion:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
verhält sich wie die erste, außer dass der entsprechende Überprüfungskonvertierungsspezifizierer p
ist.
Die letzte (elfte) virtuelle geschützte Member-Funktion:
virtual iter_type do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
verhält sich wie die erste, außer dass sie versucht, eine Übereinstimmung für ein vollständiges, nicht leeres boolesches Eingabefeld zu finden. Bei erfolgreicher Ausführung konvertiert es das boolesche Eingabefeld in einen Wert vom Typ bool
und speichert diesen Wert in Val.
Ein boolesches Eingabefeld akzeptiert eine von zwei Formen. Wenn iosbase.flags() & ios_base::
boolalpha falsch ist, ist es mit einem Eingabefeld für ganze Zahlen identisch, mit der Ausnahme, dass der konvertierte Wert entweder 0 (für FALSE) oder 1 (für TRUE) sein muss. Andernfalls muss die Sequenz entweder mit fac.
numpunct::falsename()
(für FALSE), oder fac.
numpunct::truename()
(für TRUE) übereinstimmen.
Beispiel
Informationen hierzu finden Sie im Beispiel für get, bei dem die virtuelle Memberfunktion durch do_get
aufgerufen wird.
num_get::get
Extrahiert einen numerischen oder booleschen Wert aus einer Zeichenfolge.
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;
Parameter
first
Der Anfang des Zeichenbereichs, aus dem die Zahl gelesen wird.
last
Das Ende des Zeichenbereichs, aus dem die Zahl gelesen wird.
iosbase
Die ios_base, deren Flags durch die Konvertierung verwendet werden.
state
Der Zustand, zu dem die Failbit (siehe ios_base:: iostate) bei einem Fehler hinzugefügt wird.
val
Der gelesene Wert.
Rückgabewert
Der Iterator, nachdem der Wert gelesen wurde.
Hinweise
Alle Memberfunktionen geben do_get( first, last, iosbase, state, val)
zurück.
Die erste virtuelle geschützte Memberfunktion versucht, sequenzielle Elemente zuzuordnen. Sie beginnt zuerst in der Sequenz [ first
, last
), bis sie ein vollständiges, nicht leeres Eingabefeld für ganze Zahlen erkannt hat. Bei erfolgreicher Ausführung konvertiert es dieses Feld in seinen entsprechenden Wert als Typ long
und speichert das Ergebnis in Val. Sie gibt einen Iterator zurück, der das erste Element nach dem numerischen Eingabefeld festlegt. Andernfalls speichert die Funktion nichts im Wert und legt den Zustand festios_base::failbit
. Sie gibt einen Iterator zurück, der das erste Element nach jedem Präfix eines gültigen Eingabefelds für ganze Zahlen festlegt. In beiden Fällen, wenn der Rückgabewert der letzten entspricht, legt die Funktion den Zustand festios_base::eofbit
.
Das Eingabefeld für die ganze Zahl wird konvertiert, indem die gleichen Regeln, die von den Überprüfungsfunktionen für den Abgleich und das Konvertieren einer Reihe von char
-Elemente aus einer Datei genutzt wurden, angewendet werden. Jedes dieser char
Elemente wird angenommen, um einem entsprechenden Element vom Typ CharType
durch eine einfache 1:1-Zuordnung zuzuordnen. Die entsprechende Überprüfungskonvertierungsspezifikation wird wie folgt bestimmt:
Wenn
iosbase.
Flags okt sind, lautetlo
die Konvertierungsspezifikation& ios_base::basefield == ios_base::
.Wenn
iosbase.flags & ios_base::basefield == ios_base::
hex, ist die Konvertierungsspezifikationlx
.Wenn
iosbase.flags & ios_base::basefield == 0
, ist die Konvertierungsspezifikationli
.Andernfalls ist die Konvertierungsspezifikation
ld
.
Das Format eines ganzzahligen Eingabefelds wird weiter durch das Gebietsschema-Facet bestimmt, das vom Aufruf use_facetnumpunct
<
<Elem>(iosbase.
getloc())
zurückgegeben wird. fac
Speziell:
fac.
grouping bestimmt, wie Ziffern auf der linken Seite des Dezimaltrennzeichens gruppiert werden.fac.
thousands_sep bestimmt die Sequenz, die Gruppen von Ziffern auf der linken Seite eines Dezimaltrennzeichens trennt.
Wenn keine Instanzen von fac.thousands_sep
im numerischen Eingabefeld auftreten, wird keine Gruppierungseinschränkung auferlegt. Andernfalls werden alle von ihnen auferlegten fac.grouping
Gruppierungseinschränkungen erzwungen, und Trennzeichen werden entfernt, bevor die Überprüfungskonvertierung erfolgt.
Die zweite virtuelle geschützte Memberfunktion:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
unsigned long& val) const;
verhält sich wie die erste, außer dass sie eine Konvertierungsspezifikation von ld
durch lu
ersetzt. Bei erfolgreicher Ausführung konvertiert es das numerische Eingabefeld in einen Wert vom Typ unsigned long
und speichert diesen Wert in Val.
Die dritte virtuelle geschützte Member-Funktion:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
double& val) const;
verhält sich wie die erste, außer dass sie versucht, eine Übereinstimmung für ein vollständiges, nicht leeres Gleitkommaeingabefeld zu finden. fac.
decimal_point bestimmt die Sequenz, die ganzzahlige Ziffern von Bruchziffern trennt. Der entsprechende Überprüfungsonvertierungsspezifizierer ist lf
.
Die vierte virtuelle geschützte Member-Funktion:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
long double& val) const;
verhält sich dasselbe wie der dritte, mit der Ausnahme, dass der entsprechende Scankonvertierungsbezeichner ist Lf
.
Die fünfte virtuelle geschützte Memberfunktion:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
void *& val) const;
verhält sich wie die erste, außer dass der entsprechende Überprüfungskonvertierungsspezifizierer p
ist.
Die sechste virtuelle geschützte Memberfunktion:
virtual iter_type do_get(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
bool& val) const;
verhält sich wie die erste, außer dass sie versucht, eine Übereinstimmung für ein vollständiges, nicht leeres boolesches Eingabefeld zu finden. Bei erfolgreicher Ausführung konvertiert es das boolesche Eingabefeld in einen Wert vom Typ bool
und speichert diesen Wert in Val.
Ein boolesches Eingabefeld nimmt eine von zwei Formen an. Wenn iosbase.flags & ios_base::
boolalpha ist false
, ist es identisch mit einem ganzzahligen Eingabefeld, mit der Ausnahme, dass der konvertierte Wert entweder 0 (für false
) oder 1 (für true
) sein muss. Andernfalls muss die Sequenz mit fac.
falsename (for) oder fac.
truename (fortrue
false
) übereinstimmen.
Beispiel
// 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
Ein Typ, der einen Eingabeiterator beschreibt.
typedef InputIterator iter_type;
Hinweise
Der Type stellt ein Synonym für den Vorlagenparameter InputIterator
dar.
num_get::num_get
Der Konstruktor für Objekte vom Typ num_get
, die verwendet werden, um numerische Werte aus Sequenzen zu extrahieren.
explicit num_get(size_t refs = 0);
Parameter
Refs
Integerwert, der zum Angeben des Speicherverwaltungstyps für das Objekt verwendet wird.
Hinweise
Die möglichen Werte für den Refs-Parameter und deren Bedeutung sind:
0: Die Lebensdauer des Objekts wird von den Gebietsschemas verwaltet, in denen es enthalten ist.
1: Die Lebensdauer des Objekts muss manuell verwaltet werden.
> 1: Diese Werte sind nicht definiert.
Direkte Beispiele hierfür sind nicht möglich, da der Destruktor geschützt ist.
Der Konstruktor initialisiert sein Basisobjekt mit locale::
Facet(refs)
.
Siehe auch
<locale>
facet-Klasse
Threadsicherheit in der C++-Standardbibliothek