Freigeben über


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 longund 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:

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 (fortruefalse) ü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 InputIteratordar.

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