std::money_get
From cppreference.com
| ヘッダー <locale> で定義 |
||
| template< class CharT, |
||
クラステンプレートstd::money_getは、文字ストリームから通貨値を解析するための規則をカプセル化します。標準I/Oマニピュレータstd::get_moneyは、I/Oストリームのロケールのstd::money_getファセットを使用します。
継承図
std::money_getの特殊化が標準ライブラリによって提供されることが保証されていない場合(下記参照)、そのget()およびdo_get()の動作は、指定されたとおりに保証されません。
目次 |
[編集] 特殊化
標準ライブラリは、以下の特殊化を提供することが保証されています(これらは あらゆるロケールオブジェクトによって実装される必要があります)。
| ヘッダー
<locale> で定義 | |
| std::money_get<char> | 通貨値のナロー文字列表現を解析します。 |
| std::money_get<wchar_t> | 通貨値のワイド文字列表現を解析します。 |
さらに、標準ライブラリは、以下の型要件を満たすすべての特殊化を提供することも保証されています。
-
CharTは以下のいずれかです。- char,
- wchar_t、および
- 実装定義の 文字コンテナ型 で、iostream コンポーネント をインスタンス化できる文字の要件を満たすもの。
-
InputItは LegacyInputIterator の要件を満たす必要があります。
[編集] ネストされた型
| 型 | 定義 |
char_type
|
CharT
|
string_type
|
std::basic_string<CharT> |
iter_type
|
InputIt
|
[編集] データメンバ
| メンバ | 説明 |
std::locale::id id [static] |
ファセットの識別子 |
[編集] メンバ関数
新しいmoney_getファセットを構築します。(public member function) | |
do_getを呼び出します。(public member function) |
[編集] 保護されたメンバ関数
money_getファセットを破棄します。(protected メンバ関数) | |
| [virtual] |
入力ストリームから通貨値を解析します。 (仮想保護メンバ関数) |
[編集] 例
このコードを実行
#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は、iostream コンポーネント をインスタンス化できる 文字の要件を満たす |
char、wchar_t、およびその他の実装定義 の文字型のみを受け入れることが保証されています。 |
| LWG 2392 | C++98 | num_put が受け入れることが保証できるのは、money_getによって受け入れられることが保証されている任意のCharTを受け入れることが保証されていました。 |
実装定義の 文字コンテナ型を受け入れることを保証できます。 |
[編集] 関連項目
std::money_getおよびstd::money_putによって使用される通貨フォーマットパラメータを定義します。(クラステンプレート) | |
| 通貨値を文字列シーケンスとして出力するために書式設定する (クラステンプレート) | |
| (C++11) |
通貨の値を構文解析する (関数テンプレート) |