money_get-Klasse

Die Klassenvorlage beschreibt ein Objekt, das als Gebietsschema-Facet dienen kann, um Konvertierungen von Sequenzen vom Typ CharType in Geldwerte zu steuern.

Syntax

template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class money_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 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
money_get Der Konstruktor für Objekte vom Typ money_get, die verwendet werden, um numerische Werte aus Sequenzen zu extrahieren, die monetäre Werte darstellen.

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.
string_type Ein Typ, der eine Zeichenfolge beschreibt, die Zeichen vom Typ CharType enthält.

Memberfunktionen

Memberfunktion Beschreibung
do_get Eine virtuelle Funktion, die aufgerufen wird, um einen Zahlenwert aus einer Zeichenfolge zu extrahieren, die einen monetären Wert darstellt.
get Extrahiert einen numerischen Wert aus einer Zeichenfolge, die einen monetären Wert darstellt.

Anforderungen

Header:<locale>

Namespace: std

money_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.

money_get::d o_get

Eine virtuelle Funktion, die aufgerufen wird, um einen Zahlenwert aus einer Zeichenfolge zu extrahieren, die einen monetären Wert darstellt.

virtual iter_type do_get(iter_type first,
    iter_type last,
    bool Intl,
    ios_base& Iosbase,
    ios_base::iostate& State,
    long double& val) const virtual iter_type do_get(iter_type first,
    iter_type last,
    bool Intl,
    ios_base& Iosbase,
    ios_base::iostate& State,
    string_type& val) const

Parameter

first
Der Eingabeiterator, der den Anfang der zu konvertierenden Sequenz adressiert.

last
Der Eingabeiterator, der das Ende der zu konvertierenden Sequenz adressiert.

Intl
Ein boolescher Wert, der die Art des Währungssymbols angibt, das in der Reihenfolge erwartet wird: true wenn international, false wenn inlands.

Iosbase
Ein Formatkennzeichen, das bei Verwendung angibt, dass das Währungssymbol optional ist. Ansonsten ist das Währungssymbol erforderlich.

State
Je nachdem, ob die Vorgänge erfolgreich waren, legt dieses Element die entsprechenden Bitmaskenelemente für den Streamstatus fest.

val
Eine Zeichenfolge zum Speichern der konvertierten Sequenz.

Rückgabewert

Ein Eingabeiterator,der das erste Element nach dem Eingabefeld für den monetären Wert adressiert.

Hinweise

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 monetäre Werte erkannt hat. Bei erfolgreicher Ausführung konvertiert es dieses Feld in eine Abfolge einer oder mehrerer Dezimalziffern, optional vor einem Minuszeichen ( -), um den Betrag darzustellen und das Ergebnis in der string_type Objektwert zu speichern. Sie gibt einen Iterator zurück, der das erste Element nach dem Eingabefeld für monetäre Werte festlegt. Andernfalls speichert die Funktion eine leere Sequenz im Wert und legt sie im Zustand festios_base::failbit. Sie gibt einen Iterator zurück, der das erste Element nach jedem Präfix eines gültigen Eingabefelds für monetäre Werte festlegt. In beiden Fällen legt die Funktion, wenn der Rückgabewert last ist, ios_base::eofbit auf State fest.

Die zweite virtuelle geschützte Memberfunktion verhält sich genauso wie die erste, mit der Ausnahme, dass bei erfolgreicher Konvertierung die optional signierte Ziffernabfolge in einen Wert vom Typ long double konvertiert wird und dieser Wert in Val gespeichert wird.

Das Format eines Währungseingabefelds wird durch das gebietsschema facet fac bestimmt, das vom effektiven Aufruf use_facet<moneypunct<CharType, intl>>( iosbase) zurückgegeben wird. getloc).

Speziell:

  • fac. neg_format bestimmt die Reihenfolge, in der Komponenten des Felds auftreten.

  • fac. curr_symbol bestimmt die Sequenz der Elemente, aus der ein Währungssymbol besteht.

  • fac. positive_sign bestimmt die Sequenz der Elemente, aus der ein positiven Vorzeichen besteht.

  • fac. negative_sign bestimmt die Sequenz der Elemente, aus der ein negativen Vorzeichen besteht.

  • fac. grouping bestimmt, wie Ziffern auf der linken Seite des Dezimaltrennzeichens gruppiert werden.

  • fac. thousands_sep bestimmt das Element, das Gruppen von Ziffern auf der linken Seite eines Dezimaltrennzeichens trennt.

  • fac. decimal_point bestimmt das Element, das ganzzahlige Ziffern von Bruchziffern trennt.

  • fac. frac_digits bestimmt die Anzahl signifikanter Bruchziffern auf der rechten Seite eines Dezimaltrennzeichens. Wird ein Geldbetrag mit mehr Bruchziffern analysiert, als durch frac_digits aufgerufen werden, beendet do_get die Analyse, wenn höchstens frac_digits-Zeichen verbraucht wurden.

Wenn die Zeichenzeichenfolge ( fac. negative_sign oder fac. positive_sign) mehr als ein Element aufweist, wird nur das erste Element abgeglichen, wobei das Element gleich money_base::sign im Formatmuster ( fac) angezeigt wird. neg_format Alle übrigen Elemente werden am Ende des Eingabefelds für monetäre Werte zugeordnet. Wenn keine Zeichenfolge über ein erstes Element verfügt, das dem nächsten Element im Eingabefeld für monetäre Werte entspricht, wird die Zeichenfolge als leer angenommen. Das Vorzeichen ist in diesem Fall positiv.

Wenn iosbase. flags & showbase is nonzero, the string fac. curr_symbol dort zugeordnet werden, wo das dem money_base::symbol entsprechende Element im Formatmuster angezeigt wird. Andernfalls gilt: Wenn money_base::symbol am Ende des Formatmusters auftritt und keine weiteren Elemente der Zeichenfolge verbleiben, wird das Währungssymbol nicht zugeordnet. Ansonsten wird das Währungssymbol optional zugeordnet.

Wenn keine Instanzen von fac. thousands_sep im Wertteil des Eingabefelds für monetäre Werte (in dem das dem money_base::symbol entsprechende Element im Formatmuster angezeigt wird) auftritt, erfolgt keine Gruppierungseinschränkung. Andernfalls werden alle durch fac. grouping auferlegte Gruppierungseinschränkungen erzwungen. Bitte beachten Sie, dass die resultierende Ziffernsequenz einer ganzen Zahl entspricht, deren niederwertige fac. frac_digits-Dezimalstellen auf der rechten Seite des Dezimaltrennzeichens berücksichtigt werden.

Dort, wo das dem money_base::space entsprechende Element im Formatmuster angezeigt wird, werden beliebig viele Leerstellen zugeordnet, wenn das Element nicht am Ende des Formatmusters angezeigt wird. Andernfalls werden keine internen Leerzeichen zugeordnet. Ein Element ch wird als Leerzeichen betrachtet, wenn use_facet<ctype<CharType>>( iosbase). getloc). is( ctype_base::space, ch) ist true.

Beispiel

Informationen hierzu finden Sie im Beispiel für get, das do_get aufruft.

money_get::get

Extrahiert einen numerischen Wert aus einer Zeichenfolge, die einen monetären Wert darstellt.

iter_type get(iter_type first,
    iter_type last,
    bool Intl,
    ios_base& Iosbase,
    ios_base::iostate& State,
    long double& val) const;

iter_type get(iter_type first,
    iter_type last,
    bool Intl,
    ios_base& Iosbase,
    ios_base::iostate& State,
    string_type& val) const;

Parameter

first
Der Eingabeiterator, der den Anfang der zu konvertierenden Sequenz adressiert.

last
Der Eingabeiterator, der das Ende der zu konvertierenden Sequenz adressiert.

Intl
Ein boolescher Wert, der die Art des Währungssymbols angibt, das in der Reihenfolge erwartet wird: true wenn international, false wenn inlands.

Iosbase
Ein Formatkennzeichen, das bei Verwendung angibt, dass das Währungssymbol optional ist. Ansonsten ist das Währungssymbol erforderlich.

State
Legt die entsprechenden Bitmaskenelemente für den Streamstatus fest, je nachdem, ob die Vorgänge erfolgreich waren.

val
Eine Zeichenfolge zum Speichern der konvertierten Sequenz.

Rückgabewert

Ein Eingabeiterator,der das erste Element nach dem Eingabefeld für den monetären Wert adressiert.

Hinweise

Beide Memberfunktionen geben do_get(first, last, Intl, Iosbase, State, val) zurück.

Beispiel

// money_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;
   psz << use_facet<moneypunct<char, 1> >(loc).curr_symbol() << "-1.000,56";
   basic_stringstream< char > psz2;
   psz2 << "-100056" << use_facet<moneypunct<char, 1> >(loc).curr_symbol();

   ios_base::iostate st = 0;
   long double fVal;

   psz.flags( psz.flags( )|ios_base::showbase );
   // Which forced the READING the currency symbol
   psz.imbue(loc);
   use_facet < money_get < char > >( loc ).
      get( basic_istream<char>::_Iter( psz.rdbuf( ) ),
           basic_istream<char>::_Iter( 0 ), true, psz, st, fVal );

   if ( st & ios_base::failbit )
      cout << "money_get(" << psz.str( ) << ", intl = 1) FAILED"
           << endl;
   else
      cout << "money_get(" << psz.str( ) << ", intl = 1) = "
           << fVal/100.0 << endl;

   use_facet < money_get < char > >( loc ).
      get(basic_istream<char>::_Iter(psz2.rdbuf( )),
          basic_istream<char>::_Iter(0), false, psz2, st, fVal);

   if ( st & ios_base::failbit )
      cout << "money_get(" << psz2.str( ) << ", intl = 0) FAILED"
           << endl;
   else
      cout << "money_get(" << psz2.str( ) << ", intl = 0) = "
           << fVal/100.0 << endl;
};

money_get::iter_type

Ein Typ, der einen Eingabeiterator beschreibt.

typedef InputIterator iter_type;

Hinweise

Der Type ist ein Synonym für den Vorlagenparameter InputIterator.

money_get::money_get

Der Konstruktor für Objekte vom Typ money_get, die verwendet werden, um numerische Werte aus Sequenzen zu extrahieren, die monetäre Werte darstellen.

explicit money_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).

money_get::string_type

Ein Typ, der eine Zeichenfolge beschreibt, die Zeichen des Typs CharType enthält.

typedef basic_string<CharType, Traits, Allocator> string_type;

Hinweise

Der Typ beschreibt eine Spezialisierung der Klassenvorlage basic_string.

Siehe auch

<locale>
facet-Klasse
Threadsicherheit in der C++-Standardbibliothek