Поделиться через


Класс money_get

Шаблон класса описывает объект, который может служить аспектом языкового стандарта для управления преобразованиями последовательностей типа CharType в денежные значения.

Синтаксис

template <class CharType, class InputIterator = istreambuf_iterator<CharType>>
class money_get : public locale::facet;

Параметры

CharType
Тип, используемый внутри программы для кодирования символов в языковом стандарте.

InputIterator
Тип итератора, из которого функции получения считывают своих входные данные.

Замечания

Как и в случае любого другого аспекта языкового стандарта, начальное сохраненное значение статического идентификатора объекта равно нулю. Первая попытка получить доступ к сохраненному значению сохранит уникальное положительное значение в id.

Конструкторы

Конструктор Description
money_get Конструктор для объектов типа money_get, используемых для извлечения числовых значений из последовательностей, представляющих денежные значения.

Определения типов

Введите имя Description
char_type Тип, используемый для описания символа, используемого языковым стандартом.
iter_type Тип, который описывает итератор ввода.
string_type Тип, описывающий строку, содержащую символы типа CharType.

Функции элементов

Функция-член Description
do_get Виртуальная функция, вызываемая для извлечения числового значения из последовательности символов, представляющей денежное значение.
get Извлекает числовое значение из последовательности символов, представляющей денежное значение.

Требования

Заголовок:<языковой стандарт>

Пространство имен: std

money_get::char_type

Тип, используемый для описания символа, используемого языковым стандартом.

typedef CharType char_type;

Замечания

Тип является синонимом для параметра-шаблона CharType.

money_get::d o_get

Виртуальная функция, которая вызывается для извлечения числового значения из последовательности символов, которая представляет денежное значение.

virtual iter_type do_get(iter_type first,
    iter_type last,
    bool Intl,
    ios_base& Iosbase,
    ios_base::iostate& State,
    long double& val) const virtual iter_type do_get(iter_type first,
    iter_type last,
    bool Intl,
    ios_base& Iosbase,
    ios_base::iostate& State,
    string_type& val) const

Параметры

first
Входной итератор, адресующий начало последовательности для преобразования.

last
Входной итератор, адресующий конец последовательности для преобразования.

Международный
Логическое значение, указывающее тип символа валюты, ожидаемого в последовательности: true если международный, false если внутренний.

Iosbase
Флаг формата, который, будучи установленным, указывает, что символ валюты не обязателен; в противном случае он обязателен.

Штат
Устанавливает нужные элементы битовой маски для состояния потока согласно тому, успешно ли выполнились операции.

Val
Строка, хранящая преобразованную последовательность.

Возвращаемое значение

Входной итератор, адресующий первый элемент после денежного поля ввода.

Замечания

Первая защищенная виртуальная функция-член пытается сопоставить последовательные элементы, начиная с первого в последовательности [ first, last), пока не распознает полное, непустое денежное поле ввода. В случае успешного выполнения это поле преобразуется в последовательность из одной или нескольких десятичных цифр, при необходимости предшествуя знаку минус (-), чтобы представить сумму и сохранить результат в string_type объект val. Она возвращает итератор, обозначающий первый элемент после денежного поля ввода. В противном случае функция сохраняет пустую последовательность в val и задает ios_base::failbit в состоянии. Она возвращает итератор, обозначающий первый элемент после любого префикса допустимого денежного поля ввода. В любом случае, если возвращаемое значение равно last, функция устанавливает ios_base::eofbit в State.

Вторая виртуальная защищенная функция-член ведет себя так же, как и первая, за исключением того, что при успешном выполнении она преобразует необязательно подписанную последовательность цифр в значение типа long double и сохраняет это значение в val.

Формат денежного входного поля определяется fac аспектом языкового стандарта, возвращаемым эффективным вызовом use_facet<moneypunct<CharType, intl>>(iosbase). getloc).

В частности:

  • fac. neg_format определяет порядок, в котором будут расположены компоненты поля.

  • fac. curr_symbol определяет последовательность элементов, составляющую символ валюты.

  • fac. positive_sign определяет последовательность элементов, составляющую положительный знак.

  • fac. positive_sign определяет последовательность элементов, составляющую отрицательный знак.

  • fac. grouping определяет, как группируются цифры слева от любого десятичного разделителя.

  • fac. thousands_sep определяет элемент, разделяющий группы цифр слева от любого десятичного разделителя.

  • fac. decimal_point определяет элемент, который отделяет цифры целой части от цифр дробной части.

  • fac. frac_digits определяет количество значимых цифр справа от любого десятичного разделителя. При разборе денежной суммы, в которой больше цифр после запятой, чем требуется frac_digits, do_get прекращает разбор после как максимум frac_digits символов.

Если строка знака (fac. negative_sign или fac.positive_sign) имеет несколько элементов, то в шаблоне формата (fac) отображается только первый элемент, в котором элемент равен money_base::sign, отображается в шаблоне формата (fac). neg_format Любые остающиеся элементы сопоставляются в конце денежного поля ввода. Если ни одна из строк не имеет первого элемента, который соответствует следующему элементу в денежном поле ввода, строка знака считается пустой, а знак — положительным.

Если iosbase. флаги и showbase ненулевое значение, строковое fac. curr_symbol должна соответствовать в том месте, где в шаблоне формата возникает элемент, равный money_base::symbol. В противном случае, если money_base::symbol возникает в конце шаблона формате и если не осталось элементов строки знака для сопоставления, символ валюты не сопоставляется. В противном случае символ валюты при необходимости сопоставляется.

Если в части значения денежного поля ввода не появляется экземпляров fac. thousands_sep (если в шаблоне формата есть элемент, равный money_base::value), ограничения группировки не применяются. В противном случае применяются любые ограничения группировки, определяемые в fac. grouping. Обратите внимание, что результирующая последовательность цифр представляет собой целое число, чьи младшие десятичные цифры fac. frac_digits считаются находящимися справа от десятичного разделителя.

Произвольный пробел считается соответствующим, если в шаблоне формата появляется элемент, равный money_base::space, если он находится не в конце шаблона формата. В противном случае внутренние пробелы не сопоставляются. Элемент ch считается пробелом, если use_facet<ctype<CharType>>(iosbase). getloc). is( ctype_base::space, ch) имеет значение true.

Пример

См. пример для get, который вызывает do_get.

money_get::get

Извлекает числовое значение из последовательности символов, представляющей денежное значение.

iter_type get(iter_type first,
    iter_type last,
    bool Intl,
    ios_base& Iosbase,
    ios_base::iostate& State,
    long double& val) const;

iter_type get(iter_type first,
    iter_type last,
    bool Intl,
    ios_base& Iosbase,
    ios_base::iostate& State,
    string_type& val) const;

Параметры

first
Входной итератор, адресующий начало последовательности для преобразования.

last
Входной итератор, адресующий конец последовательности для преобразования.

Международный
Логическое значение, указывающее тип символа валюты, ожидаемого в последовательности: true если международный, false если внутренний.

Iosbase
Флаг формата, который при установке указывает, что символ валюты является необязательным. В противном случае он обязателен.

Штат
Устанавливает нужные элементы битовой маски для состояния потока согласно тому, успешно ли выполнились операции.

Val
Строка, хранящая преобразованную последовательность.

Возвращаемое значение

Входной итератор, адресующий первый элемент после денежного поля ввода.

Замечания

Обе функции-члены возвращают do_get(first, last, Intl, Iosbase, State, val).

Пример

// money_get_get.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
using namespace std;

int main( )
{
   locale loc( "german_germany" );

   basic_stringstream< char > psz;
   psz << use_facet<moneypunct<char, 1> >(loc).curr_symbol() << "-1.000,56";
   basic_stringstream< char > psz2;
   psz2 << "-100056" << use_facet<moneypunct<char, 1> >(loc).curr_symbol();

   ios_base::iostate st = 0;
   long double fVal;

   psz.flags( psz.flags( )|ios_base::showbase );
   // Which forced the READING the currency symbol
   psz.imbue(loc);
   use_facet < money_get < char > >( loc ).
      get( basic_istream<char>::_Iter( psz.rdbuf( ) ),
           basic_istream<char>::_Iter( 0 ), true, psz, st, fVal );

   if ( st & ios_base::failbit )
      cout << "money_get(" << psz.str( ) << ", intl = 1) FAILED"
           << endl;
   else
      cout << "money_get(" << psz.str( ) << ", intl = 1) = "
           << fVal/100.0 << endl;

   use_facet < money_get < char > >( loc ).
      get(basic_istream<char>::_Iter(psz2.rdbuf( )),
          basic_istream<char>::_Iter(0), false, psz2, st, fVal);

   if ( st & ios_base::failbit )
      cout << "money_get(" << psz2.str( ) << ", intl = 0) FAILED"
           << endl;
   else
      cout << "money_get(" << psz2.str( ) << ", intl = 0) = "
           << fVal/100.0 << endl;
};

money_get::iter_type

Тип, который описывает итератор ввода.

typedef InputIterator iter_type;

Замечания

Этот тип является синонимом для параметра-шаблона InputIterator.

money_get::money_get

Конструктор для объектов типа money_get, используемых для извлечения числовых значений из последовательностей, представляющих денежные значения.

explicit money_get(size_t _Refs = 0);

Параметры

_Refs
Целочисленное значение, используемое для указания типа управления памятью для объекта.

Замечания

Возможные значения параметра _Refs и их значение:

  • 0: время существования объекта управляется языковыми стандартами, которые его содержат.

  • 1: время существования объекта должно управляться вручную.

  • > 1. Эти значения не определены.

Прямые примеры привести нельзя, так как деструктор защищен.

Конструктор инициализирует базовый объект с помощью языкового стандарта::facet(_Refs).

money_get::string_type

Тип, который описывает строку, содержащую символы типа CharType.

typedef basic_string<CharType, Traits, Allocator> string_type;

Замечания

Тип описывает специализацию шаблона класса basic_string.

См. также

<локаль>
Класс facet
Потокобезопасность в стандартной библиотеке C++