std:: num_put
|
Definiert in Header
<locale>
|
||
|
template
<
class
CharT,
|
||
Die Klasse
std::num_put
kapselt die Regeln zur Formatierung numerischer Werte als Zeichenketten. Insbesondere werden die Typen
bool
,
long
,
unsigned
long
,
long
long
,
unsigned
long
long
(seit C++11)
,
double
,
long
double
,
void
*
, sowie alle Typen, die implizit in diese konvertierbar sind (wie
int
oder
float
), unterstützt. Die standardmäßigen Formatierungsausgabeoperatoren (wie
cout
<<
n
;
) verwenden das
std::num_put
-Facet der Locale des I/O-Streams, um die Textdarstellung von Zahlen zu erzeugen.
Vererbungsdiagramm
Wenn eine
std::num_put
Spezialisierung nicht garantiert von der Standardbibliothek bereitgestellt wird (siehe unten), sind die Verhaltensweisen von
put()
und
do_put()
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 :: num_put < char > | erzeugt Schmalsaitendarstellungen von Zahlen |
| std :: num_put < wchar_t > | erzeugt Breitsaitendarstellungen von Zahlen |
Darüber hinaus garantiert die Standardbibliothek auch jede Spezialisierung bereitzustellen, die die folgenden Typanforderungen erfüllt:
-
CharTist einer von- char ,
- wchar_t , und
- jedem anderen implementierungsdefinierten Zeichencontainertyp , der die Anforderungen für ein Zeichen erfüllt, für das beliebige iostream-Komponenten instanziiert werden können; und
-
OutputItmuss die Anforderungen eines LegacyOutputIterator erfüllen.
Verschachtelte Typen
| Typ | Definition |
char_type
|
CharT
|
iter_type
|
OutputIt
|
Datenmitglieder
| Mitglied | Beschreibung |
std::locale::id
id
[static]
|
der Identifikator des Facet |
Memberfunktionen
Konstruiert einen neuen
num_put
Facette
(öffentliche Elementfunktion) |
|
Ruft
do_put
auf
(öffentliche Elementfunktion) |
Geschützte Memberfunktionen
zerstört ein
num_put
Facet-Objekt
(geschützte Elementfunktion) |
|
|
[virtual]
|
formatiert eine Zahl und schreibt in den Ausgabestrom
(virtuelle geschützte Elementfunktion) |
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
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
war garantiert für jedes
CharT
anwendbar,
das die Anforderungen für ein Zeichen erfüllt, für das beliebige iostream-Komponenten instanziiert werden können |
garantiert nur die Annahme von
char
,
wchar_t und anderen implementierungs- definierten Zeichentypen |
| LWG 2392 | C++98 |
nur Zeichentyp
CharT
konnte
durch
num_put
garantiert akzeptiert werden
|
kann implementierungs-
definierte Zeichencontainertypen garantieren zu akzeptieren |
Siehe auch
|
definiert Numerische Interpunktionsregeln
(Klassentemplate) |
|
|
analysiert numerische Werte aus einer Eingabezeichenfolge
(Klassentemplate) |
|
|
(C++11)
|
konvertiert einen Ganzzahl- oder Gleitkommawert zu
string
(Funktion) |
|
(C++11)
|
konvertiert einen Ganzzahl- oder Gleitkommawert zu
wstring
(Funktion) |