std::num_put
| Definiert in Header <locale> |
||
| template< class CharT, |
||
Die Klasse std::num_put kapselt die Regeln für die Formatierung von numerischen Werten als Zeichenketten. Insbesondere werden die Typen bool, long, unsigned long, long long, unsigned long long(seit C++11), double, long double, void* und alle Typen, die implizit in diese konvertierbar sind (wie z.B. int oder float), unterstützt. Die standardmäßigen Formatierungs-Ausgabeoperatoren (wie z.B. cout << n;) verwenden das std::num_put-Facet der Locale des I/O-Streams, um Textdarstellungen von Zahlen zu generieren.
Vererbungdiagramm
Wenn eine std::num_put-Spezialisierung nicht garantiert von der Standardbibliothek bereitgestellt wird (siehe unten), sind die Verhaltensweisen ihrer put()- und do_put()-Methoden 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::num_put<char> | erzeugt schmale Zeichenkettenrepräsentationen von Zahlen |
| std::num_put<wchar_t> | erzeugt breite Zeichenkettenrepräsentationen von Zahlen |
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
-
OutputItmuss die Anforderungen an LegacyOutputIterator erfüllen.
[bearbeiten] Verschachtelte Typen
| Typ | Definition |
char_type
|
CharT
|
iter_type
|
OutputIt
|
[edit] Datenmember
| Mitglied | Beschreibung |
std::locale::id id [static] |
die Kennung des Facets |
[bearbeiten] Member-Funktionen
konstruiert ein neues num_put-Facet(öffentliche Memberfunktion) | |
ruft do_put auf(öffentliche Memberfunktion) |
[bearbeiten] Geschützte Member-Funktionen
destruiert ein num_put-Facet(geschützte Memberfunktion) | |
| [virtuell] |
formatiert eine Zahl und schreibt sie in den Ausgabestrom (virtuelle geschützte Memberfunktion) |
[bearbeiten] Beispiel
#include <iostream> #include <iterator> #include <locale> #include <string> int main() { double n = 1234567.89; std::cout.imbue(std::locale("de_DE.UTF-8")); std::cout << "Direct conversion to string:\n" << std::to_string(n) << '\n' << "Output using a german locale:\n" << std::fixed << n << '\n' << "Output using an american locale:\n"; // use the facet directly std::cout.imbue(std::locale("en_US.UTF-8")); auto& f = std::use_facet<std::num_put<char>>(std::cout.getloc()); f.put(std::ostreambuf_iterator<char>(std::cout), std::cout, ' ', n); std::cout << '\n'; }
Mögliche Ausgabe
Direct conversion to string: 1234567.890000 Output using a german locale: 1.234.567,890000 Output using an american locale: 1,234,567.890000
[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 | num_put musste 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önnteakzeptiert werden musste von num_put |
kann die Akzeptanz von implementierungs- definierten Zeichencontainertypen garantieren |
[bearbeiten] Siehe auch
| definiert Regeln für numerische Satzzeichen (Klassentemplate) | |
| analysiert numerische Werte aus einer Eingabezeichensequenz (Klassentemplate) | |
| (C++11) |
konvertiert einen ganzzahligen oder Gleitkommawert in einen string(function) |
| (C++11) |
konvertiert einen ganzzahligen oder Gleitkommawert in einen wstring(function) |