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


Класс money_put

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

Синтаксис

template <class CharType,
    class OutputIterator = ostreambuf_iterator<CharType>>
class money_put : public locale::facet;

Параметры

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

OutputIterator
Тип итератора, куда функции записи денежных значений записывают свои выходные данные.

Замечания

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

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

Конструктор Description
money_put Конструктор для объектов типа money_put.

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

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

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

Функция-член Description
do_put Виртуальная функция, вызываемая для преобразования числа или строки в последовательность символов, представляющую денежное значение.
put Преобразует число или строку в последовательность символов, представляющую денежное значение.

Требования

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

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

money_put::char_type

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

typedef CharType char_type;

Замечания

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

money_put::d o_put

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

virtual iter_type do_put(
    iter_type next,
    bool _Intl,
    ios_base& _Iosbase,
    CharType _Fill,
    const string_type& val) const;

virtual iter_type do_put(
    iter_type next,
    bool _Intl,
    ios_base& _Iosbase,
    CharType _Fill,
    long double val) const;

Параметры

next
Итератор, адресующий первый элемент во вставляемой строке.

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

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

_Заполнять
Символ, используемый для пробелов.

Val
Строковый объект для преобразования.

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

Итератор вывода, который адресует позицию после последнего сформированного элемента.

Замечания

Первая виртуальная защищенная функция-член создает последовательные элементы, начинающиеся рядом с получением поля денежного вывода из string_type объекта val. Последовательность, контролируемая val , должна начинаться с одной или нескольких десятичных цифр, при необходимости предшествующей знаку минус (-), представляющей сумму. Функция возвращает итератор, обозначающий первый элемент за пределами созданного выходного денежного поля.

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

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

В частности:

  • fac. pos_format определяет порядок, в котором компоненты поля создаются для неотрицательного значения.

  • fac. neg_format определяет порядок, в котором компоненты поля создаются для отрицательного значения.

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

  • fac. positive_sign определяет последовательность элементов для создания положительного знака.

  • fac. positive_sign определяет последовательность элементов для создания отрицательного знака.

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

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

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

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

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

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

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

Заполнение происходит как для любого числового поля вывода, за исключением того, что, если значение iosbase. флаги и iosbase. internal не нулевое, любое внутреннее заполнение создается там, где в шаблоне формата появляется элемент, равный money_base::space, если он есть. В противном случае внутреннее заполнение предшествует создаваемой последовательности. Символ заполнения — fill.

Функция вызывает iosbase. width(0) для сброса ширины поля в нуль.

Пример

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

money_put::iter_type

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

typedef OutputIterator iter_type;

Замечания

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

money_put::money_put

Конструктор для объектов типа money_put.

explicit money_put(size_t _Refs = 0);

Параметры

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

Замечания

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

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

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

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

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

Конструктор инициализирует свой базовый объект с locale::facet(_Refs).

money_put::p ut

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

iter_type put(
    iter_type next,
    bool _Intl,
    ios_base& _Iosbase,
    CharType _Fill,
    const string_type& val) const;

iter_type put(
    iter_type next,
    bool _Intl,
    ios_base& _Iosbase,
    CharType _Fill,
    long double val) const;

Параметры

next
Итератор, адресующий первый элемент во вставляемой строке.

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

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

_Заполнять
Символ, используемый для пробелов.

Val
Строковый объект для преобразования.

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

Итератор вывода, который адресует позицию после последнего сформированного элемента.

Замечания

Обе функции-члены возвращают do_put(next, _Intl, _Iosbase, _Fill, val).

Пример

// money_put_put.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>

int main()
{
    std::locale loc( "german_germany" );
    std::basic_stringstream<char> psz;

    psz.imbue(loc);
    psz.flags(psz.flags() | std::ios_base::showbase); // force the printing of the currency symbol
    std::use_facet<std::money_put<char> >(loc).put(std::basic_ostream<char>::_Iter(psz.rdbuf()), true, psz, ' ', 100012);
    if (psz.fail())
        std::cout << "money_put() FAILED" << std::endl;
    else
        std::cout << "money_put() = \"" << psz.rdbuf()->str() << "\"" << std::endl;
}
money_put() = "EUR1.000,12"

money_put::string_type

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

typedef basic_string<CharType, Traits, Allocator> string_type;

Замечания

Тип описывает специализацию шаблона класса basic_string , объекты которых могут хранить последовательности элементов из исходной последовательности.

См. также

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