共用方式為


num_put 類別

類別範本,描述可做為地區設定 Facet 的物件,以控制數值轉換為 型 CharType別序列的轉換。

語法

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

參數

CharType
程式內用於編碼地區設定字元的類型。

OutputIterator
數值 put 函式將其輸出寫入其中的迭代器類型。

備註

如同所有地區設定 facet,靜態物件識別碼有初始儲存值零。 第一次嘗試存取它的儲存值時,會在 id 中儲存一個唯一的正值。

建構函式

建構函式 描述
num_put num_put 類型物件的建構函式。

Typedefs

類型名稱 描述
char_type 類型,用來描述由地區設定使用的字元。
iter_type 描述輸出迭代器的類型。

成員函式

成員函數 描述
do_put 虛擬函式,呼叫以將數字轉換成 CharType 序列,表示為特定地區設定格式化的數字。
put 將數字轉換成 CharType 序列,表示為特定地區設定格式化的數字。

需求

Header:<locale>

命名空間:std

num_put::char_type

類型,用來描述由地區設定使用的字元。

typedef CharType char_type;

備註

此類型是範本參數 CharType的同義字。

num_put::d o_put

虛擬函式,呼叫以將數字轉換成 CharType 序列,表示為特定地區設定格式化的數字。

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;

參數

下一步
迭代器,定址對象是所插入字串的第一個元素。

_Iosbase
指定的資料流,其中包含帶有 numpunct facet 的地區設定,可用來為輸出和旗標加上標點符號以設定輸出格式。

_填補
間距所使用的字元。

val
要輸出的數字或布林值類型。

傳回值

輸出迭代器,定址對象是所產生之最後一個元素的後面一個位置。

備註

第一個虛擬受保護的成員函式會產生循序專案,從 val產生整數輸出欄位。 此函式會傳回迭代器,此迭代器指定在所產生的整數輸出欄位後下一個要插入元素的位置。

產生整數輸出欄位的規則,與列印函式在將一系列 char 元素產生至檔案時所使用的規則相同。 每個這類char元素都假設是透過簡單、一對一的對應對應至類型的 CharType 對等專案。 不過,列印函式會以空白或數位 0 填補欄位, do_put 而是使用 fill。 對等的列印轉換規格是以下列方式決定:

  • 如果 iosbase. flags & ios_base::basefield == ios_base::oct,轉換規格為 。lo

  • 如果 iosbase.flags & ios_base::basefield == ios_base::十六進位,則轉換規格為 。lx

  • 否則,轉換規格會是 ld

如果 iosbase. width 不是零,就會在前面加上此值的欄位寬度。 接著,函式會呼叫 iosbase. width(0) 將欄位寬度重設為零。

只有當指定輸出欄位所需的元素數目下限 N 小於 iosbase. width 時,才需要進行填補。 這類填補是由填滿的 N - 寬度複本序列所組成。 接著,填補會以下列方式進行:

  • 如果 iosbase. flags & ios_base::adjustfield == ios_base::left,旗標 - 會加上前面。 (填補的發生位置是在已產生的文字之後)。

  • 如果 iosbase.flagsios_base::adjustfieldios_base:: == 內部,則旗標 0 前面會加上。 (就數字輸出欄位而言,會在列印函式以 0 填補的地方進行填補)。

  • 否則,不會在前面加上任何額外的旗標。 (填補字元會出現在已產生的序列之前)。

最後:

  • 如果 iosbase. flagsios_base::showpos 為非零,旗標 + 會預先加上轉換規格。

  • 如果 iosbase. flags & ios_base::showbase 為非零,旗標 # 會預先加上轉換規格。

整數輸出欄位格式是由呼叫use_facet<numpunct<Elem>(iosbase所傳回的地區設定 Facetfac 進一步決定。 getloc)。 具體而言:

  • fac. grouping 會決定任何小數點左邊數字分組的方式

  • fac. thousands_sep 會決定任何小數點左邊分隔數字群組的序列

如果 fac. grouping (其第一個元素的值為 CHAR_MAX) 未施加任何千分號條件約束,就不會有任何 fac. thousands_sep 執行個體在輸出欄位中產生。 否則,會在進行列印轉換之後插入分隔符號。

第二個虛擬的受保護成員函式:

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

行為與第一個相同,不同的是,它會以 lu 取代 ld 轉換規格。

第三個虛擬的受保護成員函式:

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

行為與第一個相同,不同的是,它會從 val 的值產生浮點數輸出欄位。 fac. decimal_point 會決定將整數與小數分隔的序列。 對等的列印轉換規格是以下列方式決定:

  • 如果 iosbase. flags & ios_base::floatfield == ios_base::fixed,轉換規格為 。lf

  • 如果 iosbase. flags & ios_base::floatfield == ios_base::科學,轉換規格為 。le 如果 iosbase. flagsios_base::uppercase 為非零, e 會取代為 E

  • 否則,轉換規格會是 lg。 如果 iosbase. flags & ios_base::uppercase 為非零, g 會取代為 G

如果 iosbase. flags & ios_base::fixed 為非零或 iosbaseprecision 大於零,就會在轉換規格前面加上值為 iosbase. precision 的有效位數。 所有填補行為都與整數輸出欄位的填補行為相同。 填補字元為 fill。 最後:

  • 如果 iosbase. flagsios_base::showpos 為非零,旗標 + 會預先加上轉換規格。

  • 如果 iosbase. flagsios_base::showpoint 為非零值,旗標 # 會加上轉換規格的前面。

第四個虛擬的受保護成員函式:

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

行為相同的第三個,不同之處在於轉換規格中的限定符 l 會取代為 L

第五個虛擬的受保護成員函式:

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

行為與第一個相同,不同的是,轉換規格為 p, 再加上指定填補時所需的任何限定詞。

第六個虛擬的受保護成員函式:

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

行為與第一個相同,不同之處在於它會從 val 產生布爾輸出欄位。

布林值輸出欄位採用下列兩種形式其中之一。 如果 iosbase.flags & ios_base::boolalphafalse,則成員函式會傳 do_put(_Next, _Iosbase, _Fill, (long)val)回 ,這通常會產生0(for false) 或1(針對 true) 產生的序列。 否則,產生的序列為 facfalsename (for false), 或 fac.truename (for true)。

第七個虛擬的受保護成員函式:

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

行為與第一個相同,不同的是,它會以 lld 取代 ld 轉換規格。

第八個虛擬的受保護成員函式:

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

行為與第一個相同,不同的是,它會以 llu 取代 ld 轉換規格。

範例

請參閱 put 的範例,它會呼叫 do_put

num_put::iter_type

描述輸出迭代器的類型。

typedef OutputIterator iter_type;

備註

此類型與範本參數 OutputIterator 同義。

num_put::num_put

num_put 類型物件的建構函式。

explicit num_put(size_t _Refs = 0);

參數

_裁判
整數值,用來指定物件的記憶體管理類型。

備註

_Refs 參數的可能值及其重要性如下:

  • 0:物件的存留期由包含該物件的地區設定來管理。

  • 1:物件的存留期必須以手動方式管理。

  • > 1:未定義這些值。

無法提供任何直接範例,因為解構函式受到保護。

建構函式會以 locale::facet(_ Refs) 將其基底物件初始化。

num_put::p ut

將數字轉換成 的序列 CharType,代表為指定地區設定格式化的數位。

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;

參數

dest
迭代器,定址對象是所插入字串的第一個元素。

_Iosbase
指定的資料流,其中包含帶有 numpunct facet 的地區設定,可用來為輸出和旗標加上標點符號以設定輸出格式。

_填補
間距所使用的字元。

val
要輸出的數字或布林值類型。

傳回值

輸出迭代器,定址對象是所產生之最後一個元素的後面一個位置。

備註

所有成員函式都會傳回 do_put( next, _Iosbase, _Fill, val)。

範例

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

另請參閱

<地區設定>
facet 類別
C++ 標準程式庫中的執行緒安全