Namespaces
Variants

std:: money_get

From cppreference.net
Definiert in Header <locale>
template <

class CharT,
class InputIt = std:: istreambuf_iterator < CharT >

> class money_get ;

Klassentemplate std::money_get kapselt die Regeln zum 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.

cpp/locale/locale/facet std-money get-inheritance.svg

Vererbungsdiagramm

Wenn eine std::money_get Spezialisierung nicht garantiert von der Standardbibliothek bereitgestellt wird (siehe unten), sind die Verhaltensweisen von get() und do_get() nicht wie spezifiziert garantiert.

Inhaltsverzeichnis

Spezialisierungen

Die Standardbibliothek garantiert die Bereitstellung der folgenden Spezialisierungen (sie sind von jedem Locale-Objekt implementiert werden müssen ):

Definiert im Header <locale>
std :: money_get < char > analysiert Narrow-String-Darstellungen von Geldwerten
std :: money_get < wchar_t > analysiert Wide-String-Darstellungen von Geldwerten

Zusätzlich ist die Standardbibliothek auch garantiert, jede Spezialisierung bereitzustellen, die die folgenden Typanforderungen erfüllt:

Verschachtelte Typen

Typ Definition
char_type CharT
string_type std:: basic_string < CharT >
iter_type InputIt

Datenmitglieder

Mitglied Beschreibung
std::locale::id id [static] der Identifikator des Facet

Memberfunktionen

Konstruiert einen neuen money_get Facette
(öffentliche Elementfunktion)
ruft do_get auf
(öffentliche Elementfunktion)

Geschützte Memberfunktionen

zerstört einen money_get Facette
(geschützte Elementfunktion)
[virtual]
analysiert einen Geldwert aus einem Eingabestrom
(virtuelle geschützte Elementfunktion)

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

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 war garantiert, jedes CharT zu akzeptieren,
das die Anforderungen für ein Zeichen erfüllt, für das
eine beliebige iostream-Komponente instanziiert werden kann
garantiert nur die Akzeptanz von char ,
wchar_t und anderen implementierungs-
definierten Zeichentypen
LWG 2392 C++98 nur Zeichentyp CharT konnte
durch money_get garantiert akzeptiert werden
kann die Akzeptanz von implementierungs-
definierten Zeichencontainertypen garantieren

Siehe auch

definiert von std::money_get und std::money_put verwendete Formatierungsparameter für Währungsangaben
(Klassentemplate)
formatiert einen Geldwert zur Ausgabe als Zeichenfolge
(Klassentemplate)
(C++11)
analysiert einen Geldwert
(Funktionstemplate)