std::get_money
From cppreference.com
| ヘッダ <iomanip>で定義 |
||
| template< class MoneyT > /*未指定*/ get_money( MoneyT& mon, bool intl = false ); |
(C++11以降) | |
in >> get_money(mon, intl)という式で使用される場合、入力ストリーム in に現在設定されているロケールの std::money_get ファセットによって指定されるとおりに、文字入力を通貨値として解析し、その値を mon に格納します。
in >> get_money(mon, intl) の抽出操作は、FormattedInputFunction として動作します。
目次 |
[編集] パラメータ
| mon | - | 通貨値が書き込まれる変数。 long double または std::basic_string のいずれかです。 |
| intl | - | true の場合は必要な国際通貨文字列を期待し、それ以外の場合は省略可能な通貨記号を期待します。 |
[編集] 戻り値
未指定の型のオブジェクト。その結果、
- in が std::basic_istream<CharT, Traits> 型のオブジェクトである場合、式 in >> get_money(mon, intl) は
- std::basic_istream<CharT, Traits>& 型
- in の値
- f(in, mon, intl) を呼び出したかのように動作します。
ここで関数 f は次のように定義されます。
template<class CharT, class Traits, class MoneyT> void f(std::basic_ios<CharT, Traits>& str, MoneyT& mon, bool intl) { using Iter = std::istreambuf_iterator<CharT, Traits>; using MoneyGet = std::money_get<CharT, Iter>; std::ios_base::iostate err = std::ios_base::goodbit; const MoneyGet& mg = std::use_facet<MoneyGet>(str.getloc()); mg.get(Iter(str.rdbuf()), Iter(), intl, str, err, mon); if (err != std::ios_base::goodbit) str.setstate(err); }
[編集] 例
このコードを実行
#include <iomanip> #include <iostream> #include <locale> #include <sstream> int main() { std::istringstream in("$1,234.56 2.22 USD 3.33"); long double v1, v2; std::string v3; in.imbue(std::locale("en_US.UTF-8")); in >> std::get_money(v1) >> std::get_money(v2) >> std::get_money(v3, true); if (in) std::cout << std::quoted(in.str()) << " parsed as: " << v1 << ", " << v2 << ", " << v3 << '\n'; else std::cout << "Parse failed"; }
出力
"$1,234.56 2.22 USD 3.33" parsed as: 123456, 222, 333
[編集] 関連項目
| 入力文字列シーケンスから通貨値を解析・構築する (クラステンプレート) | |
| (C++11) |
通貨の値をフォーマットして出力する (関数テンプレート) |