共用方式為


money_put 類別

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

語法

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

參數

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

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

備註

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

建構函式

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

Typedefs

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

成員函式

成員函數 描述
do_put 虛擬函式,呼叫以將數字或字串轉換為代表貨幣值的字元序列。
put 將數字或字串轉換為代表貨幣值的字元序列。

需求

Header:<locale>

命名空間:std

money_put::char_type

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

typedef CharType char_type;

備註

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

money_put::d o_put

虛擬函式,呼叫以將數字或字串轉換為代表貨幣值的字元序列。

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

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

參數

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

_國際
布爾值,表示序列中預期的貨幣符號類型: true 如果是國際, false 則為國內。

_Iosbase
格式旗標,已設定時,表示貨幣符號為選用;否則,必須指定貨幣符號。

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

val
要轉換的字串物件。

傳回值

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

備註

第一個虛擬受保護的成員函式會產生序列元素,從 string_type 物件 val 產生貨幣輸出字段val 控制的序列必須以一或多個十進位數開頭,選擇性地前面加上減號 (-),代表數量。 此函式會傳回迭代器,此迭代器指定所產生之貨幣輸出欄位後的第一個元素。

第二個虛擬受保護成員函式的行為與第一個函式相同,不同之處在於它會有效地將 val 轉換成十進位數序列,並選擇性地在減號前面,然後將該序列轉換成上述。

貨幣輸出欄位的格式是由 (effective) 呼叫傳回的地區設定 Facet fac 所決定,use_facet<moneypunct<CharTypeintl>>iosbase. getloc)。

具體而言:

  • fac. pos_format 會決定為非負數值產生欄位元件時的順序。

  • fac. neg_format 會決定為負數值產生欄位元件時的順序。

  • fac. curr_symbol 會決定要為貨幣符號產生的元素序列。

  • fac. positive_sign 會決定要為正號產生的元素序列。

  • fac. negative_sign 會決定要為負號產生的元素序列。

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

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

  • fac. decimal_point 會決定將整數與任何小數分隔的元素。

  • fac. frac_digits 會決定任何小數點右邊的有效小數數目。

如果符號字串 (fac. negative_signfac. positive_sign) 有多個元素,則只會產生第一個專案,其中元素等於 money_base::sign 會出現在格式模式中 (fac. neg_formatfac. )。 pos_format 所有其餘元素則是在貨幣輸入欄位的結尾產生。

如果 iosbase. flagsshowbase 為非零,字串 faccurr_symbol 就會在格式模式中與 money_base::symbol 相等之元素出現的位置產生。 否則,不會產生任何貨幣符號。

如果 fac. grouping (其第一個元素的值為 CHAR_MAX) 未施加任何千分號條件約束,就不會有任何 fac. thousands_sep 執行個體在貨幣輸出欄位的值部分 (格式模式中與 money_base::value 相等之元素出現的位置) 產生。 如果 fac. frac_digits 為零,則在十進位數字之後不會產生任何 fac. decimal_point 執行個體。 否則,產生的貨幣輸出欄位會將低序位 fac. frac_digits 十進位數字放在小數點右邊。

系統會針對所有數字輸出欄位進行填補,但有例外,就是如果 iosbase. flags & iosbaseinternal 不為零,便會在格式模式中與 money_base::space 相等之元素出現的位置,於該元素未出現的情況下,產生任何內部填補字元。 否則,內部填補字元會出現在已產生的序列之前。 填補字元為 fill

函式會呼叫 iosbase. width(0) 將欄位寬度重設為零。

範例

請參閱 put 的範例,其中會由 put 呼叫此虛擬成員函式。

money_put::iter_type

描述輸出迭代器的類型。

typedef OutputIterator iter_type;

備註

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

money_put::money_put

money_put 類型物件的建構函式。

explicit money_put(size_t _Refs = 0);

參數

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

備註

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

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

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

  • > 1:未定義這些值。

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

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

money_put::p ut

將數字或字串轉換為代表貨幣值的字元序列。

iter_type put(
    iter_type next,
    bool _Intl,
    ios_base& _Iosbase,
    CharType _Fill,
    const string_type& val) const;

iter_type put(
    iter_type next,
    bool _Intl,
    ios_base& _Iosbase,
    CharType _Fill,
    long double val) const;

參數

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

_國際
布爾值,表示序列中預期的貨幣符號類型: true 如果是國際, false 則為國內。

_Iosbase
格式旗標,已設定時,表示貨幣符號為選用;否則,必須指定貨幣符號。

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

val
要轉換的字串物件。

傳回值

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

備註

兩個成員函式都會傳回 do_put( next, _Intl, _Iosbase, _Fill, val)。

範例

// money_put_put.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>

int main()
{
    std::locale loc( "german_germany" );
    std::basic_stringstream<char> psz;

    psz.imbue(loc);
    psz.flags(psz.flags() | std::ios_base::showbase); // force the printing of the currency symbol
    std::use_facet<std::money_put<char> >(loc).put(std::basic_ostream<char>::_Iter(psz.rdbuf()), true, psz, ' ', 100012);
    if (psz.fail())
        std::cout << "money_put() FAILED" << std::endl;
    else
        std::cout << "money_put() = \"" << psz.rdbuf()->str() << "\"" << std::endl;
}
money_put() = "EUR1.000,12"

money_put::string_type

類型,描述包含 CharType 類型字元的字串。

typedef basic_string<CharType, Traits, Allocator> string_type;

備註

此類型描述類別範本 的特製化basic_string 物件可以從來源序列儲存元素序列。

另請參閱

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