Udostępnij za pośrednictwem


num_put — Klasa

Szablon klasy opisujący obiekt, który może służyć jako aspekt ustawień regionalnych do kontrolowania konwersji wartości liczbowych na sekwencje typu CharType.

Składnia

template <class CharType,
    class OutputIterator = ostreambuf_iterator<CharType>>
class num_put : public locale::facet;

Parametry

Typ char
Typ używany w programie do kodowania znaków w ustawieniach regionalnych.

OutputIterator
Typ iteratora, do którego funkcje numeryczne put zapisują swoje dane wyjściowe.

Uwagi

Podobnie jak w przypadku dowolnego zestawu reguł ustawień regionalnych, identyfikator obiektu statycznego ma początkową przechowywaną wartość zero. Pierwsza próba uzyskania dostępu do przechowywanej wartości przechowuje unikatową wartość dodatnią w identyfikatorze.

Konstruktory

Konstruktor opis
num_put Konstruktor dla obiektów typu num_put.

Typedefs

Nazwa typu opis
char_type Typ opisujący znak używany przez ustawienie regionalne.
iter_type Typ, który opisuje iterator danych wyjściowych.

Funkcje składowe

Funkcja składowa opis
do_put Funkcja wirtualna wywoływana w celu przekonwertowania liczby na sekwencję CharTypes reprezentującą liczbę sformatowaną dla danego ustawienia regionalnego.
kłaść Konwertuje liczbę na sekwencję CharTypes, która reprezentuje liczbę sformatowaną dla danych ustawień regionalnych.

Wymagania

Nagłówek:<ustawienia regionalne>

Przestrzeń nazw: std

num_put::char_type

Typ opisujący znak używany przez ustawienie regionalne.

typedef CharType char_type;

Uwagi

Typ jest synonimem parametru CharTypeszablonu .

num_put::d o_put

Funkcja wirtualna wywoływana w celu przekonwertowania liczby na sekwencję CharTypes reprezentującą liczbę sformatowaną dla danego ustawienia regionalnego.

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;

Parametry

następny
Iterator odnoszący się do pierwszego elementu wstawionego ciągu.

_Iosbase
Określono strumień zawierający ustawienia regionalne z aspektem numpunct używanym do przerywania danych wyjściowych i flag do formatowania danych wyjściowych.

_Wypełnić
Znak używany do odstępów.

Val
Typ liczbowy lub logiczny, który ma być danymi wyjściowymi.

Wartość zwracana

Iterator danych wyjściowych adresuje pozycję jedną poza ostatnim wygenerowanym elementem.

Uwagi

Pierwsza wirtualna chroniona funkcja składowa generuje elementy sekwencyjne rozpoczynające się od momentu utworzenia pola wyjściowego liczby całkowitej z wartości val. Funkcja zwraca iterator wyznaczający następne miejsce, aby wstawić element poza wygenerowanym polem danych wyjściowych liczb całkowitych.

Pole wyjściowe liczby całkowitej jest generowane przez te same reguły, które są używane przez funkcje drukowania do generowania serii char elementów do pliku. Przyjmuje się, że każdy taki element char jest mapowany na równoważny element typu CharType za pomocą prostego mapowania jeden do jednego. Gdzie funkcja print dopełnia pole spacjami lub cyfrą 0, do_put zamiast tego używa wartości fill. Równoważna specyfikacja konwersji wydruku jest określana w następujący sposób:

  • Jeśli iosbase. flagi i ios_base::basefield == ios_base::październik, specyfikacja konwersji to .lo

  • Jeśli iosbase.flags & ios_base::basefieldios_base:: == szesnastkowy, specyfikacja konwersji to .lx

  • W przeciwnym razie specyfikacja konwersji to ld.

Jeśli iosbase. szerokość jest niezerowa, a szerokość pola tej wartości jest poprzedzana. Następnie funkcja wywołuje bazę danych iosbase. width(0) w celu zresetowania szerokości pola do zera.

Wypełnienie występuje tylko wtedy, gdy minimalna liczba elementów N wymaganych do określenia pola wyjściowego jest mniejsza niż iosbase. szerokość. Takie wypełnienie składa się z sekwencji N - szerokości kopii wypełnienia. Wypełnienie następuje w następujący sposób:

  • Jeśli iosbase. flagi i ios_base::adjustfield == ios_base::po lewej stronie flaga - jest poprzedzana. (Wypełnienie występuje po wygenerowanych tekstach).

  • Jeśli element iosbase.flags & ios_base::adjustfield == ios_base::, flaga 0 jest poprzedzana. (W przypadku pola danych wyjściowych liczbowych dopełnienie ma miejsce, gdy funkcja drukowania jest wyliczona z wartością 0).

  • W przeciwnym razie żadna dodatkowa flaga nie jest poprzedzana. (Wypełnienie występuje przed wygenerowaną sekwencją).

W końcu:

  • Jeśli iosbase. flagi i ios_base::pokazy są niezerowe, flaga + jest poprzedzana specyfikacją konwersji.

  • Jeśli iosbase. flags & ios_base::showbase jest niezerowa, flaga # jest poprzedzana specyfikacją konwersji.

Format pola wyjściowego liczby całkowitej jest dodatkowo określany przez fac aspektu ustawień regionalnych zwracanych przez wywołanie use_facet<numpunct<Elem>( iosbase. getloc). Szczególnie:

  • fac. grupowanie określa sposób grupowania cyfr po lewej stronie dowolnego punktu dziesiętnego

  • fac. thousands_sep określa sekwencję oddzielającą grupy cyfr po lewej stronie dowolnego punktu dziesiętnego

Jeśli żadne ograniczenia grupowania nie są nakładane przez fac. grupowanie (jego pierwszy element ma wartość CHAR_MAX), a następnie nie ma wystąpień fac. thousands_sep są generowane w polu danych wyjściowych. W przeciwnym razie separatory są wstawiane po zakończeniu konwersji wydruku.

Druga funkcja wirtualnego chronionego elementu członkowskiego:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    unsigned long val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że zastępuje specyfikację konwersji parametru ld lu.

Trzecia wirtualna chroniona funkcja składowa:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    double val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że generuje pole wyjściowe zmiennoprzecinkowe z wartości val. fac. decimal_point określa sekwencję oddzielającą cyfry całkowite od cyfr ułamkowych. Równoważna specyfikacja konwersji wydruku jest określana w następujący sposób:

  • Jeśli iosbase. flagi i ios_base::floatfield == ios_base::stałe, specyfikacja konwersji to .lf

  • Jeśli iosbase. flagi i ios_base::floatfieldios_base:: == naukowe, specyfikacja konwersji to .le Jeśli iosbase. flagi i ios_base::wielkie litery są inne niżzerowe, e jest zastępowany znakiem E.

  • W przeciwnym razie specyfikacja konwersji to lg. Jeśli iosbase. flags & ios_base::uppercase is nonzero, g is replaced with G.

Jeśli iosbase. flags & ios_base::fixed jest niezerowy lub jeśli iosbase. precyzja jest większa niż zero— precyzja z wartością iosbase. precyzja jest poprzedzana specyfikacją konwersji. Każde wypełnienie zachowuje się tak samo jak w przypadku pola wyjściowego liczby całkowitej. Znak wypełnienia jest wypełniany. W końcu:

  • Jeśli iosbase. flagi i ios_base::pokazy są niezerowe, flaga + jest poprzedzana specyfikacją konwersji.

  • Jeśli iosbase. flagi i ios_base::showpoint są niezerowe, flaga # jest poprzedzana specyfikacją konwersji.

Czwarta funkcja wirtualnego chronionego elementu członkowskiego:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    long double val) const;

zachowuje się tak samo jak trzeci, z tą różnicą, że kwalifikator l w specyfikacji konwersji jest zastępowany elementem L.

Piąta wirtualna chroniona funkcja składowa:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    const void* val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że specyfikacja konwersji to p, oraz każdy kwalifikator wymagany do określenia wypełnienia.

Szósta funkcja wirtualnego chronionego elementu członkowskiego:

virtual iter_type do_put(iter_type next,
    ios_base& _Iosbase,
    CharType _Fill,
    bool val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że generuje pole wyjściowe wartości logicznej na podstawie wartości.

Pole wyjściowe wartości logicznej przyjmuje jedną z dwóch form. Jeśli iosbase.flags & ios_base::wartość logiczna to false, funkcja składowa zwraca do_put(_Next, _Iosbase, _Fill, (long)val)wartość , która zazwyczaj generuje wygenerowaną sekwencję 0 (dla false) lub 1 (dla true). W przeciwnym razie wygenerowana sekwencja jest fac.falsename (dla false), lub fac.truename (dla trueelementu ).

Siódmy wirtualny element członkowski chroniony:

virtual iter_type do_put(iter_type next,
    ios_base& iosbase,
    Elem fill,
    long long val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że zastępuje specyfikację konwersji parametru ld lld.

Ósmy wirtualny element członkowski chroniony:

virtual iter_type do_put(iter_type next,
    ios_base& iosbase,
    Elem fill,
    unsigned long long val) const;

zachowuje się tak samo jak pierwszy, z tą różnicą, że zastępuje specyfikację konwersji parametru ld llu.

Przykład

Zobacz przykład put, który wywołuje metodę do_put.

num_put::iter_type

Typ, który opisuje iterator danych wyjściowych.

typedef OutputIterator iter_type;

Uwagi

Typ jest synonimem parametru szablonu OutputIterator.

num_put::num_put

Konstruktor dla obiektów typu num_put.

explicit num_put(size_t _Refs = 0);

Parametry

_Bibl.
Wartość całkowita używana do określania typu zarządzania pamięcią dla obiektu.

Uwagi

Możliwe wartości parametru _Refs i ich istotności to:

  • 0: Okres istnienia obiektu jest zarządzany przez ustawienia regionalne, które go zawierają.

  • 1: Okres istnienia obiektu musi być zarządzany ręcznie.

  • > 1: Te wartości nie są zdefiniowane.

Nie są możliwe żadne bezpośrednie przykłady, ponieważ destruktor jest chroniony.

Konstruktor inicjuje obiekt podstawowy za pomocą ustawień regionalnych::facet(_ Refs).

num_put::p ut

Konwertuje liczbę na sekwencję CharTypes reprezentującą liczbę sformatowaną dla danych ustawień regionalnych.

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;

Parametry

dest
Iterator odnoszący się do pierwszego elementu wstawionego ciągu.

_Iosbase
Określono strumień zawierający ustawienia regionalne z aspektem numpunct używanym do przerywania danych wyjściowych i flag do formatowania danych wyjściowych.

_Wypełnić
Znak używany do odstępów.

Val
Typ liczbowy lub logiczny, który ma być danymi wyjściowymi.

Wartość zwracana

Iterator danych wyjściowych adresuje pozycję jedną poza ostatnim wygenerowanym elementem.

Uwagi

Wszystkie funkcje składowe zwracają do_put( next, _Iosbase, _Fill, val).

Przykład

// 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

Zobacz też

<ustawienia regionalne>
facet, klasa
Bezpieczeństwo wątku w standardowej bibliotece C++