std:: num_get
|
Definiert in Header
<locale>
|
||
|
template
<
class
CharT,
|
||
Die Klasse
std::num_get
kapselt die Regeln zum Parsen von Zeichenketten-Darstellungen numerischer Werte. Insbesondere werden die Typen
bool
,
unsigned
short
,
unsigned
int
,
long
,
unsigned
long
,
long
long
,
unsigned
long
long
(seit C++11)
,
float
,
double
,
long
double
und
void
*
unterstützt. Die standardmäßigen Formatierungs-Eingabeoperatoren (wie
cin
>>
n
;
) verwenden den
std::num_get
-Facet der Locale des I/O-Streams, um die Textdarstellungen der Zahlen zu parsen.
Vererbungsdiagramm
Wenn eine
std::num_get
Spezialisierung nicht garantiert von der Standardbibliothek bereitgestellt wird (siehe unten), sind die Verhaltensweisen ihrer
get()
und
do_get()
Funktionen 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_get < char > | erzeugt Narrow-String-Parsing von Zahlen |
| std :: num_get < wchar_t > | erzeugt Wide-String-Parsing von Zahlen |
Zusätzlich ist die Standardbibliothek auch garantiert, 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
-
InputItmuss die Anforderungen von LegacyInputIterator erfüllen.
Verschachtelte Typen
| Typ | Definition |
char_type
|
CharT
|
iter_type
|
InputIt
|
Datenmitglieder
| Mitglied | Beschreibung |
std::locale::id
id
[static]
|
der Identifikator des Facet |
Memberfunktionen
Konstruiert einen neuen
num_get
Facette
(öffentliche Elementfunktion) |
|
ruft
do_get
auf
(öffentliche Elementfunktion) |
Geschützte Memberfunktionen
zerstört einen
num_get
Facet
(geschützte Elementfunktion) |
|
|
[virtual]
|
analysiert eine Zahl aus einem Eingabestrom
(virtuelle geschützte Elementfunktion) |
Beispiel
#include <iostream> #include <iterator> #include <locale> #include <sstream> #include <string> int main() { std::string de_double = "1.234.567,89"; std::string us_double = "1,234,567.89"; // parse using streams std::istringstream de_in(de_double); de_in.imbue(std::locale("de_DE.UTF-8")); double f1; de_in >> f1; std::istringstream us_in(de_double); us_in.imbue(std::locale("en_US.UTF-8")); double f2; us_in >> f2; std::cout << "Parsing " << de_double << " as double gives " << std::fixed << f1 << " in de_DE locale and " << f2 << " in en_US\n"; // use the facet directly std::istringstream s3(us_double); s3.imbue(std::locale("en_US.UTF-8")); auto& f = std::use_facet<std::num_get<char>>(s3.getloc()); std::istreambuf_iterator<char> beg(s3), end; double f3; std::ios::iostate err; f.get(beg, end, s3, err, f3); std::cout << "parsing " << us_double << " as double using raw en_US facet gives " << f3 << '\n'; }
Ausgabe:
Parsing 1.234.567,89 as double gives 1234567.890000 in de_DE locale and 1.234000 in en_US parsing 1,234,567.89 as double using raw en_US facet gives 1234567.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_get
garantierte die Annahme jedes
CharT
, das
die Anforderungen für ein Zeichen erfüllt, für das eine beliebige iostream-Komponente instanziiert werden kann |
garantiert nur die Annahme von
char
,
wchar_t und anderen implementierungs- definierten Zeichentypen |
| LWG 2392 | C++98 |
nur Zeichentyp
CharT
konnte
durch
num_get
garantiert akzeptiert werden
|
kann implementierungs-definierte
Zeichen-Container-Typen garantieren zu akzeptieren |
Siehe auch
|
definiert Numerische Interpunktionsregeln
(Klassentemplate) |
|
|
formatiert numerische Werte für die Ausgabe als Zeichenfolge
(Klassentemplate) |
|
|
extrahiert formatierte Daten
(öffentliche Elementfunktion von
std::basic_istream<CharT,Traits>
)
|