名稱空間
變體
操作

std::money_put

來自 cppreference.com
< cpp‎ | locale
 
 
 
 
 
定義於標頭檔案 <locale>
template<

    class CharT,
    class OutputIt = std::ostreambuf_iterator<CharT>

> class money_put;

std::money_put 封裝了將貨幣值格式化為字串的規則。標準 I/O 運算子 std::put_money 使用 I/O 流區域設定的 std::money_put facet。

cpp/locale/locale/facetstd-money put-inheritance.svg

繼承圖

如果標準庫不保證提供 std::money_put 特化(見下文),則其 put()do_put() 的行為不保證符合規定。

目錄

[編輯] 特化

標準庫保證提供以下特化(它們 要求由任何區域設定物件實現

定義於標頭檔案 <locale>
std::money_put<char> 建立貨幣值的窄字串表示
std::money_put<wchar_t> 建立貨幣值的寬字串表示

此外,標準庫還保證提供滿足以下型別要求的每個特化:

[編輯] 巢狀型別

型別 定義
char_type CharT
string_type std::basic_string<CharT>
iter_type OutputIt

[編輯] 資料成員

成員 描述
std::locale::id id [static] facet 的識別符號

[編輯] 成員函式

構造新的 money_put facet
(公開成員函式)
呼叫 do_put
(公開成員函式)

[編輯] 受保護成員函式

銷燬 money_put facet
(受保護成員函式)
[virtual]
格式化貨幣值並寫入輸出流
(虛受保護成員函式) [編輯]

[編輯] 示例

#include <iomanip>
#include <iostream>
#include <iterator>
#include <locale>
 
int main()
{
    // using the I/O manipulator
    std::cout.imbue(std::locale("en_US.UTF-8"));
    std::cout << "American locale: "
              << std::showbase << std::put_money(12345678.9) << '\n';
 
    // using the facet directly
    std::cout.imbue(std::locale("de_DE.UTF-8"));
    std::cout << "German locale: ";
    auto& f = std::use_facet<std::money_put<char>>(std::cout.getloc());
    f.put({std::cout}, false, std::cout, std::cout.fill(), 12345678.9);
    std::cout << '\n';
}

輸出

American locale: $123,456.79
German locale: 123.456,79 €

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 427 C++98 money_put 保證接受任何 CharT
滿足作為字元的要求
任何 iostream 元件都可以在其上例項化
只保證接受 char,
wchar_t 和其他實現-
定義的字元型別
LWG 2392 C++98 只有字元型別 CharT 可以
保證被 money_put 接受
可以保證接受實現-
定義的字元容器型別

[編輯] 另請參見

定義 std::money_getstd::money_put 使用的貨幣格式化引數
(類模板) [編輯]
從輸入字元序列解析和構造貨幣值
(類模板) [編輯]
(C++11)
格式化並輸出貨幣值
(函式模板) [編輯]