std::money_get
Определено в заголовке <locale> | ||
|---|---|---|
template<
class CharT,
class InputIt = std::istreambuf_iterator<CharT>
> class money_get;
|
Шаблон класса std::money_get encapsulates the rules for parsing monetary values from character streams. Стандартный манипулятор ввода-вывода std::get_money использует компонент 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 (защищенная функция-член) |
|
|
[виртуальный] | парсит денежное значение из потока ввода (виртуальная защищенная функция-член) |
Объекты-члены
| статический 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 мог принять любой CharT, который удовлетворяеттребованиям для символа, на котором могут быть созданы любые компоненты iostream | только гарантирует принятие char и wchar_t, другие типы определяются реализацией |
См. также
определяет параметры денежного форматирования, используемые std::money_get и std::money_put (шаблон класса) |
|
| форматирует денежное значение для вывода как последовательность символов (шаблон класса) |
|
|
(C++11) | парсит денежное значение (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/locale/money_get