std::money_get
| Definiert in Header <locale> |
||
| template< class CharT, |
||
Die Klasse std::money_get kapselt die Regeln für das Parsen von Geldbeträgen aus Zeichenströmen. Der Standard-I/O-Manipulator std::get_money verwendet das std::money_get-Facet der Locale des I/O-Streams.
Vererbungdiagramm
Wenn eine std::money_get-Spezialisierung nicht garantiert von der Standardbibliothek bereitgestellt wird (siehe unten), sind die Verhaltensweisen ihrer get()- und do_get()-Funktionen nicht wie spezifiziert garantiert.
Inhalt |
[bearbeiten] Spezialisierungen
Die Standardbibliothek garantiert die Bereitstellung der folgenden Spezialisierungen (sie müssen von jedem Locale-Objekt implementiert werden)
| Definiert in Header
<locale> | |
| std::money_get<char> | parst schmale String-Repräsentationen von Geldbeträgen |
| std::money_get<wchar_t> | parst breite String-Repräsentationen von Geldbeträgen |
Darüber hinaus ist garantiert, dass die Standardbibliothek jede Spezialisierung bereitstellt, die die folgenden Tybanforderungen erfüllt:
-
CharTist eines davon:- char,
- wchar_t, und
- jeder andere implementierungsdefinierte Zeichencontainertyp, der die Anforderungen an ein Zeichen erfüllt, auf dem eine der iostream-Komponenten instanziiert werden kann; und
-
InputItmuss die Anforderungen von LegacyInputIterator erfüllen.
[bearbeiten] Verschachtelte Typen
| Typ | Definition |
char_type
|
CharT
|
string_type
|
std::basic_string<CharT> |
iter_type
|
InputIt
|
[edit] Datenmember
| Mitglied | Beschreibung |
std::locale::id id [static] |
die Kennung des Facets |
[bearbeiten] Member-Funktionen
erstellt ein neues money_get-Facet(öffentliche Memberfunktion) | |
ruft do_get auf(öffentliche Memberfunktion) |
[bearbeiten] Protected Member-Funktionen
zerstört ein money_get-Facet(geschützte Memberfunktion) | |
| [virtuell] |
parst einen Geldbetrag aus einem Eingabestrom (virtuelle geschützte Member-Funktion) |
[bearbeiten] Beispiel
#include <iomanip> #include <iostream> #include <iterator> #include <locale> #include <sstream> int main() { std::string str = "$1.11 $2.22 $3.33"; std::cout << std::fixed << std::setprecision(2); std::cout << '\"' << str << "\" parsed with the I/O manipulator: "; std::istringstream s1(str); s1.imbue(std::locale("en_US.UTF-8")); long double val; while (s1 >> std::get_money(val)) std::cout << val / 100 << ' '; std::cout << '\n'; str = "USD 1,234.56"; std::cout << '\"' << str << "\" parsed with the facet directly: "; std::istringstream s2(str); s2.imbue(std::locale("en_US.UTF-8")); auto& f = std::use_facet<std::money_get<char>>(s2.getloc()); std::ios_base::iostate err; std::istreambuf_iterator<char> beg(s2), end; f.get(beg, end, true, s2, err, val); std::cout << val / 100 << '\n'; }
Ausgabe
"$1.11 $2.22 $3.33" parsed with the I/O manipulator: 1.11 2.22 3.33 "USD 1,234.56" parsed with the facet directly: 1234.56
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 427 | C++98 | money_get sollte jeden CharT akzeptieren, derdie Anforderungen für ein Zeichen erfüllt, auf dem eine der iostream-Komponenten instanziiert werden kann |
garantiert nur die Akzeptanz von char, wchar_t und anderen implementierungs- definierten Zeichentypen |
| LWG 2392 | C++98 | nur der Zeichentyp CharT könntegarantiert von money_get akzeptiert wird |
kann die Akzeptanz von implementierungs- definierten Zeichencontainertypen garantieren |
[bearbeiten] Siehe auch
| definiert Geldformatierungsparameter, die von std::money_get und std::money_put verwendet werden (Klassentemplate) | |
| formatiert einen Geldbetrag für die Ausgabe als Zeichensequenz (Klassentemplate) | |
| (C++11) |
Parst einen Geldbetrag (Funktion-Template) |