Namensräume
Varianten
Aktionen

std::num_put

Von cppreference.com
< cpp‎ | locale
 
 
 
 
 
Definiert in Header <locale>
template<

    class CharT,
    class OutputIt = std::ostreambuf_iterator<CharT>

> class num_put;

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.

cpp/locale/locale/facetstd-num put-inheritance.svg

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:

[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, der
die 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önnte
akzeptiert werden musste von num_put
kann die Akzeptanz von implementierungs-
definierten Zeichencontainertypen garantieren

[bearbeiten] Siehe auch

definiert Regeln für numerische Satzzeichen
(Klassentemplate) [bearbeiten]
analysiert numerische Werte aus einer Eingabezeichensequenz
(Klassentemplate) [bearbeiten]
(C++11)
konvertiert einen ganzzahligen oder Gleitkommawert in einen string
(function) [edit]
konvertiert einen ganzzahligen oder Gleitkommawert in einen wstring
(function) [edit]