Числовое форматирование. Форматирование

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

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

std::locale    loc;
OutIt          to = ...;
std::ios_base& fmt = ...;
charT          fill = ...;
T              value = ...;

// // Получение фацета числового форматирования для контекста loc
const std::num_put<charT,OutIt>& np
 = std::use_facet<std::num_put<charT,OutIt> >(loc);

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

   
Приведенный фрагмент строит текстовое представление значения value с помощью символов типа charT и выводит их через итератор
вывода to. Формат вывода определяется флагами форматирования, хранящимися в fmt, а символ fill используется в качестве
заполнителя. Функция put() возвращает итератор для позиции, следующей за последним из выведенных символов.

   
Фацет num_put содержит функции для типов bool, long, unsigned long, double, long double и void*, передаваемых в последнем
аргументе, и не содержит функций для таких типов, как short или int, но это не вызывает проблем, поскольку соответствующие значения
базовых типов в случае необходимости автоматически преобразуются к поддерживаемым типам.

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

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий