Namespaces
Variants

std:: money_get

From cppreference.net
ヘッダーで定義 <locale>
template <

class CharT,
class InputIt = std:: istreambuf_iterator < CharT >

> class money_get ;

クラステンプレート std::money_get は、文字ストリームから通貨値を解析するための規則をカプセル化します。標準I/Oマニピュレータ std::get_money は、I/Oストリームのロケールの std::money_get ファセットを使用します。

cpp/locale/locale/facet std-money get-inheritance.svg

継承図

std::money_get の特殊化が標準ライブラリによって提供されることが保証されていない場合(下記参照)、その get() および do_get() の動作は指定通りに保証されません。

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - C++関連の専門用語(Specializations、Nested types、Data members、Member functions、Protected member functions、Example、Defect reports、See also)は原文のまま保持しました - HTMLタグ、属性、クラス名、ID、リンク先は一切変更していません - 数値や書式設定は完全に保持されています

特殊化

標準ライブラリは以下の特殊化を提供することが保証されています(これらは あらゆるロケールオブジェクトで実装が必須 とされています):

ヘッダーで定義 <locale>
std :: money_get < char > ナロウ文字列の通貨値表現を解析する
std :: money_get < wchar_t > ワイド文字列の通貨値表現を解析する

さらに、標準ライブラリは以下の型要件を満たすすべての特殊化を提供することも保証されています:

ネスト型

定義
char_type CharT
string_type std:: basic_string < CharT >
iter_type InputIt

データメンバ

メンバー 説明
std::locale::id id [static] facet の識別子

メンバー関数

新しい money_get ファセットを構築する
(public member function)
do_get を呼び出す
(public member function)

プロテクテッドメンバー関数

money_get ファセットを破棄する
(protected member function)
[virtual]
入力ストリームから通貨値を解析する
(virtual protected member function)

#include <iomanip>
#include <iostream>
#include <iterator>
#include <locale>
#include <sstream>
int main()
{
    std::string str = "$1.11 $2.22 $3.33";
    std::cout << std::fixed << std::setprecision(2);
    std::cout << '\"' << str << "\" parsed with the I/O manipulator: ";
    std::istringstream s1(str);
    s1.imbue(std::locale("en_US.UTF-8"));
    long double val;
    while (s1 >> std::get_money(val))
        std::cout << val / 100 << ' ';
    std::cout << '\n';
    str = "USD  1,234.56";
    std::cout << '\"' << str << "\" parsed with the facet directly: ";
    std::istringstream s2(str);
    s2.imbue(std::locale("en_US.UTF-8"));
    auto& f = std::use_facet<std::money_get<char>>(s2.getloc());
    std::ios_base::iostate err;
    std::istreambuf_iterator<char> beg(s2), end;
    f.get(beg, end, true, s2, err, val);
    std::cout << val / 100 << '\n';
}

出力:

"$1.11 $2.22 $3.33" parsed with the I/O manipulator: 1.11 2.22 3.33
"USD  1,234.56" parsed with the facet directly: 1234.56

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の仕様 正しい仕様
LWG 427 C++98 money_get はあらゆる CharT を受け入れることが保証されていた
(iostreamコンポーネントのインスタンス化が可能な
文字要件を満たすもの)
char
wchar_t およびその他の実装定義
文字型のみを受け入れることが保証される
LWG 2392 C++98 文字型 CharT のみが
money_get による受け入れが保証されていた
実装定義の文字コンテナ型の
受け入れを保証可能

関連項目

std::money_get および std::money_put で使用される通貨書式パラメータを定義する
(クラステンプレート)
通貨値を文字シーケンスとして出力するために整形する
(クラステンプレート)
(C++11)
通貨値を解析する
(関数テンプレート)