num_put-Klasse

Eine Klassenvorlage, die ein Objekt beschreibt, das als Gebietsschema-Facet dienen kann, um Konvertierungen numerischer Werte in Sequenzen vom Typ CharTypezu 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 CharTypedar.

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::basefieldios_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::adjustfieldios_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::floatfieldios_base:: == scientific, die Konvertierungsspezifikation lautet .le Wenn iosbase. flags & ios_base::uppercase is nonzero, e is replaced with E.

  • Andernfalls ist die Konvertierungsspezifikation lg. Wenn iosbase. flags & ios_base::uppercase is nonzero, g is replaced with G.

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 Lersetzt 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 CharTypen 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