std::money_get
来自 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
|
[编辑] 成员函数
构造一个新的 money_get 分面(公共成员函数) | |
调用 do_get (公共成员函数) |
[编辑] 受保护的成员函数
析构一个 money_get 分面(受保护的成员函数) | |
[虚拟] |
从输入流中解析货币值 (虚拟受保护的成员函数) |
[编辑] 成员对象
static std::locale::id id |
id 区域设置 (公共成员对象) |
[编辑] 示例
运行这段代码
#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 组件可以实例化的字符 要求的 CharT |
仅保证接受 char, wchar_t 和其他实现- 定义的字符类型 |
LWG 2392 | C++98 | 仅字符类型 CharT 可以保证被 money_get 接受 |
可以保证接受实现- 定义的字符容器类型 |
[编辑] 另请参阅
定义std::money_get 和 std::money_put 使用的货币格式参数 (类模板) | |
将货币值格式化为输出的字符序列 (类模板) | |
(C++11) |
解析货币值 (函数模板) |