Шаг 544.
Библиотека STL.
Интернационализация. Форматирование денежных величин. Форматирование

    На этом шаге мы рассмотрим способы форматирования денежных величин при выводе.

    Фацет money_put обеспечивает форматирование денежных величин при выводе. Он представляет собой шаблон, в аргументах которого передаются тип символов charT и тип итератора вывода OutIt. По умолчанию итератор вывода относится к типу ostreambuf_iterator. Две функции put() генерируют последовательность символов в соответствии с форматом, определяемым фацетом moneypunct. Форматируемое значение передается в виде типа long double или basic_string<charT>. Пример использования фацета:

// Получение фацета money_put для локального контекста lос 
const std::money_put<charT,OutIt>& mp 
 = std::use_facet<std::money_put<charT,OutIt> >(loc);

// Вывод данных с использованием фацета 
mp.put(to, intl, fmt, fill, value);

    Аргумент to содержит итератор вывода типа OutIt, через который записывается отформатированная строка. Функция put() возвращает объект этого типа, установленный в позицию за последним сгенерированным символом. Аргумент intl определяет используемое обозначение денежной единицы (национальное международное). Аргумент fmt определяет флаги форматирования, в том числе ширину поля и фацет moneypunct, задающий формат выводимого значения. Символ fill используется в качестве заполнителя.

    Аргумент value относится к типу long double или basic_string<charT>; в нем передается форматируемое значение. Если аргумент передается в строковом виде, строка может содержать только десятичные цифры и, возможно, минус в начале числа. Если строка начинается с минуса, то значение форматируется как отрицательное. После того как функция определяет отрицательное число, начальный минус отбрасывается. Количество цифр в дробной части определяется функцией frac_digits() фацета moneypunct.

    Стандарт требует, чтобы в каждом локальном контексте хранились специализации money_put<char> и money_put<wchar_t>. Кроме того, стандартная библиотека C++ поддерживает все специализации, у которых в первом аргументе шаблона передается тип символа, а во втором - тип итератора вывода. Хранение таких специализаций в каждом локальном контексте не является обязательным.

    На следующем шаге мы рассмотрим лексический разбор.




Предыдущий шаг Содержание Следующий шаг