std:: money_get
|
Определено в заголовочном файле
<locale>
|
||
|
template
<
class
CharT,
|
||
Шаблон класса
std::money_get
инкапсулирует правила для разбора денежных значений из символьных потоков. Стандартный манипулятор ввода-вывода
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
|
Члены данных
| Участник | Описание |
std::locale::id
id
[static]
|
идентификатор аспекта |
Функции-члены
создаёт новый
money_get
фасет
(публичная функция-член) |
|
вызывает
do_get
(публичная функция-член) |
Защищенные функции-члены
уничтожает объект
money_get
фасета
(защищенная функция-член) |
|
|
[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 | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| 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)
|
разбирает денежное значение
(шаблон функции) |