Класс 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++