num_put-Klasse
Eine Klassenvorlage, die ein Objekt beschreibt, das als Gebietsschema-Facet dienen kann, um Konvertierungen numerischer Werte in Sequenzen vom Typ CharType
zu steuern.
Syntax
template <class CharType,
class OutputIterator = ostreambuf_iterator<CharType>>
class num_put : public locale::facet;
Parameter
CharType
Der Typ, der innerhalb eines Programms zum Codieren von Zeichen in einem Gebietsschema verwendet wird.
OutputIterator
Der Typ des Iterators, in den die numerischen Put-Funktionen ihre Ausgabe schreiben.
Hinweise
Wie bei jedem Gebietsschemafacet hat die statische Objekt-ID einen anfänglichen gespeicherten Wert von NULL. Beim ersten Versuch, auf den gespeicherten Wert zuzugreifen, wird in id ein eindeutiger positiver Wert gespeichert.
Konstruktoren
Konstruktor | Beschreibung |
---|---|
num_put | Der Konstruktor für Objekte des Typs num_put . |
TypeDefs
Typname | Beschreibung |
---|---|
char_type | Ein Typ, mit dem ein Zeichen beschrieben wird, das von einem Gebietsschema verwendet wird. |
iter_type | Ein Typ, der einen Ausgabeiterator beschreibt. |
Memberfunktionen
Memberfunktion | Beschreibung |
---|---|
do_put | Eine virtuelle Funktion, die aufgerufen wird, um eine Zahl in eine Sequenz von CharType -Objekten zu konvertieren, die die Zahl darstellt, die für ein bestimmtes Gebietsschema formatiert ist. |
put | Konvertiert eine Zahl in eine Sequenz von CharType -Objekten, die die Zahl darstellt, die für ein bestimmtes Gebietsschema formatiert wird. |
Anforderungen
Header:<locale>
Namespace: std
num_put::char_type
Ein Typ, mit dem ein Zeichen beschrieben wird, das von einem Gebietsschema verwendet wird.
typedef CharType char_type;
Hinweise
Der Type stellt ein Synonym für den Vorlagenparameter CharType
dar.
num_put::d o_put
Eine virtuelle Funktion, die aufgerufen wird, um eine Zahl in eine Sequenz von CharType
-Objekten zu konvertieren, die die Zahl darstellt, die für ein bestimmtes Gebietsschema formatiert ist.
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
bool val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
long val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
unsigned long val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
double val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
long double val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
const void* val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
const long long val) const;
virtual iter_type do_put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
const unsigned long long val) const;
Parameter
Weiter
Ein Iterator, der das erste Element in der eingefügten Zeichenfolge adressiert.
_Iosbase
Gibt den Datenstrom an, der ein Gebietsschema mit numpunct-Facets enthält, die die Satzzeichen für die Ausgabe und die Flags für das Formatieren der Ausgabe erstellen.
_Füllen
Ein Zeichen, das Leerzeichen einfügt.
val
Die Nummer oder der boolesche Typ, der ausgegeben werden soll.
Rückgabewert
Ein Ausgabeiterator, der auf die erste Position nach dem jeweils letzten Element verweist.
Hinweise
Die erste virtuelle geschützte Memberfunktion generiert sequenzielle Elemente, die beginnen, um ein ganzzahliges Ausgabefeld aus dem Wert von Val zu erzeugen. Die Funktion gibt einen Iterator zurück, der die nächste Stelle zum Einfügen eines Elements nach dem generierten Ausgabefeld für ganze Zahlen festlegt.
Die Ausgabefeld für ganze Zahlen wird mit den gleichen Regeln generiert, die von Druckfunktionen für das Generieren einer Serie an char
-Elementen in einer Datei verwendet wurden. Jedes solche Zeichenelement wird angenommen, um einem entsprechenden Element vom Typ CharType
durch eine einfache 1:1-Zuordnung zuzuordnen. Wenn ein Druckfunktionsfeld ein Feld mit Leerzeichen oder der Ziffer 0 auffüllt, do_put
wird stattdessen verwendet fill
. Die entsprechende Druckkonvertierungsspezifikation wird wie folgt bestimmt:
Wenn iosbase. flags &
ios_base::basefield
==ios_base::
oct, die Konvertierungsspezifikation ist .lo
Wenn iosbase.flags & ios_base::basefield
ios_base::
== hex ist die Konvertierungsspezifikation .lx
Andernfalls ist die Konvertierungsspezifikation
ld
.
Wenn iosbase. width ungleich null ist, wird eine Feldbreite dieses Werts vorangestellt. Die Funktion ruft iosbase. width(0) auf, um die Feldbreite auf 0 (null) zurückzusetzen.
Auffüllung erfolgt nur, wenn die minimale Anzahl von Elementen N, die zur Angabe des Ausgabefelds erforderlich ist, kleiner als iosbase. width ist. Ein solcher Abstand besteht aus einer Abfolge von N-Breitenkopien - der Füllung. Das Auffüllen erfolgt folgendermaßen:
Wenn iosbase. flags &
ios_base::adjustfield
==ios_base::
left, the flag - is prepended. (Abstand tritt nach dem generierten Text auf.)Wenn iosbase.flags & ios_base::adjustfield
ios_base::
== intern ist, wird die Kennzeichnung 0 vorangestellt. (Für ein numerisches Ausgabefeld tritt der Abstand dort auf, wo die Druckfunktionen mit 0 auffüllen.)Andernfalls wird kein zusätzliches Flag vorangestellt. (Abstand tritt vor der generierten Sequenz auf.)
Letzter Schritt:
Wenn iosbase. flags &
ios_base::
showpos ist nonzero, das Flag + wird der Konvertierungsspezifikation vorangestellt.Wenn iosbase. flags & ios_base::showbase is nonzero, the flag # is prepended to the conversion specification.
Das Format eines ganzzahligen Ausgabefelds wird weiter durch das gebietsschema-Facet fac bestimmt, das vom Aufruf use_facet<numpunct<Elem>( iosbase) zurückgegeben wird. getloc). Speziell:
fac. grouping bestimmt, wie Ziffern auf der linken Seite des Dezimaltrennzeichens gruppiert werden.
fac. thousands_sep bestimmt die Sequenz, die Gruppen von Ziffern auf der linken Seite eines Dezimaltrennzeichens trennt.
Erfolgen keine Gruppierungseinschränkungen durch fac. grouping (sein erstes Element weist den Wert CHAR_MAX auf), werden keine Instanzen von fac. thousands_sep
im Ausgabefeld generiert. Andernfalls werden Trennzeichen eingefügt, nachdem die Druckkonvertierung erfolgt.
Die zweite virtuelle geschützte Memberfunktion:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
unsigned long val) const;
verhält sich wie die erste, außer dass sie eine Konvertierungsspezifikation von ld
durch lu
ersetzt.
Die dritte virtuelle geschützte Member-Funktion:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
double val) const;
verhält sich wie die erste, außer dass sie ein Gleitkommaausgabefeld aus dem Wert val erzeugt. fac. decimal_point bestimmt die Sequenz, die ganzzahlige Ziffern von Bruchziffern trennt. Die entsprechende Druckkonvertierungsspezifikation wird wie folgt bestimmt:
Wenn iosbase. flags &
ios_base::floatfield
==ios_base::
fixed, die Konvertierungsspezifikation ist .lf
Wenn iosbase. flags & ios_base::floatfield
ios_base::
== scientific, die Konvertierungsspezifikation lautet .le
Wenn iosbase. flags &ios_base::
uppercase is nonzero,e
is replaced withE
.Andernfalls ist die Konvertierungsspezifikation lg. Wenn iosbase. flags & ios_base::uppercase is nonzero,
g
is replaced withG
.
Wenn iosbase. flags & ios_base::fixed is nonzero or if iosbase. precision größer als null ist, wird eine Genauigkeit mit dem Wert iosbase. precision der Konvertierungsspezifikation vorangestellt. Abstände verhalten sich genauso wie bei einem Ausgabefeld für ganze Zahlen. Das Füllzeichen ist fill. Letzter Schritt:
Wenn iosbase. flags &
ios_base::
showpos ist nonzero, das Flag + wird der Konvertierungsspezifikation vorangestellt.Wenn iosbase. flags &
ios_base::
showpoint is nonzero, the flag # is prepended to the conversion specification.
Die vierte virtuelle geschützte Member-Funktion:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
long double val) const;
verhält sich identisch mit dem dritten, mit der Ausnahme, dass der Qualifizierer l
in der Konvertierungsspezifikation durch L
ersetzt wird.
Die fünfte virtuelle geschützte Memberfunktion:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
const void* val) const;
verhält sich wie die erste, außer dass die Konvertierungsspezifikation p
, sowie alle Qualifizierer Abstand angeben müssen.
Die sechste virtuelle geschützte Memberfunktion:
virtual iter_type do_put(iter_type next,
ios_base& _Iosbase,
CharType _Fill,
bool val) const;
verhält sich identisch mit dem ersten, außer dass es ein boolesches Ausgabefeld aus Val generiert.
Ein boolesches Ausgabefeld nimmt eine von zwei Formen an. Wenn iosbase.flags & ios_base::
boolalpha ist false
, gibt die Memberfunktion do_put(_Next, _Iosbase, _Fill, (long)val)
zurück, was in der Regel eine generierte Sequenz von 0 (für false
) oder 1 (für true
) erzeugt. Andernfalls ist die generierte Sequenz entweder fac.falsename (for false
) oder fac.truename (for true
).
Die siebte virtuelle geschützte Member-Funktion:
virtual iter_type do_put(iter_type next,
ios_base& iosbase,
Elem fill,
long long val) const;
verhält sich wie die erste, außer dass sie eine Konvertierungsspezifikation von ld
durch lld
ersetzt.
Die achte virtuelle geschützte Member-Funktion:
virtual iter_type do_put(iter_type next,
ios_base& iosbase,
Elem fill,
unsigned long long val) const;
verhält sich wie die erste, außer dass sie eine Konvertierungsspezifikation von ld
durch llu
ersetzt.
Beispiel
Siehe das Beispiel für put, mit dem do_put
aufgerufen wird.
num_put::iter_type
Ein Typ, der einen Ausgabeiterator beschreibt.
typedef OutputIterator iter_type;
Hinweise
Der Typ ist ein Synonym für den Vorlagenparameter OutputIterator.
num_put::num_put
Der Konstruktor für Objekte des Typs num_put
.
explicit num_put(size_t _Refs = 0);
Parameter
_Refs
Integerwert, der zum Angeben des Speicherverwaltungstyps für das Objekt verwendet wird.
Hinweise
Die möglichen Werte für den _Refs Parameter und deren Bedeutung sind:
0: Die Lebensdauer des Objekts wird von den Gebietsschemas verwaltet, in denen es enthalten ist.
1: Die Lebensdauer des Objekts muss manuell verwaltet werden.
> 1: Diese Werte sind nicht definiert.
Direkte Beispiele hierfür sind nicht möglich, da der Destruktor geschützt ist.
Der Konstruktor initialisiert sein Basisobjekt mit locale::facet(_ Refs).
num_put::p ut
Wandelt eine Zahl in eine Sequenz von CharType
n um, die die für ein bestimmtes Gebietsschema formatierte Zahl darstellt.
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
bool val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
long val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
unsigned long val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
Long long val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
Unsigned long long val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
double val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
long double val) const;
iter_type put(
iter_type dest,
ios_base& _Iosbase,
_Elem _Fill,
const void* val) const;
Parameter
dest
Ein Iterator, der das erste Element in der eingefügten Zeichenfolge adressiert.
_Iosbase
Gibt den Datenstrom an, der ein Gebietsschema mit numpunct-Facets enthält, die die Satzzeichen für die Ausgabe und die Flags für das Formatieren der Ausgabe erstellen.
_Füllen
Ein Zeichen, das Leerzeichen einfügt.
val
Die Nummer oder der boolesche Typ, der ausgegeben werden soll.
Rückgabewert
Ein Ausgabeiterator, der auf die erste Position nach dem jeweils letzten Element verweist.
Hinweise
Beide Memberfunktionen geben do_put( next
, _Iosbase
, _Fill
, val
) zurück.
Beispiel
// num_put_put.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
locale loc( "german_germany" );
basic_stringstream<char> psz2;
ios_base::iostate st = 0;
long double fVal;
cout << "The thousands separator is: "
<< use_facet < numpunct <char> >(loc).thousands_sep( )
<< endl;
psz2.imbue( loc );
use_facet < num_put < char > >
( loc ).put(basic_ostream<char>::_Iter(psz2.rdbuf( ) ),
psz2, ' ', fVal=1000.67);
if ( st & ios_base::failbit )
cout << "num_put( ) FAILED" << endl;
else
cout << "num_put( ) = " << psz2.rdbuf( )->str( ) << endl;
}
The thousands separator is: .
num_put( ) = 1.000,67
Siehe auch
<locale>
facet-Klasse
Threadsicherheit in der C++-Standardbibliothek