Spec-Zone.ru › C++

Именованные требования C++: Formatter (начиная с C++20)

Formatter — это тип, абстрагирующий операции форматирования для заданного типа аргумента форматирования и символьного типа. Специализации std::formatter, предоставляемые стандартной библиотекой, должны удовлетворять требованиям Formatter, если не указано иное.

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

Требования

Тип удовлетворяет требованиям Formatter, если он удовлетворяет требованиям BasicFormatter и для следующих типов и значений выражения, приведённые в таблице ниже, являются корректными и имеют указанный смысл:

Тип Определение
CharT символьный тип
Arg тип аргумента форматирования
Formatter тип Formatter для типов Arg и CharT
OutputIt тип LegacyOutputIterator
ParseCtx std::basic_format_parse_context<CharT>
FmtCtx std::basic_format_context<OutputIt,CharT>
Значение Определение
f значение типа (возможно, с квалификатором const) Formatter
arg lvalue типа Arg
t значение типа, преобразуемого в (возможно, с квалификатором const) Arg
parse_ctx lvalue типа ParseCtx, удовлетворяющее всем следующим условиям:
  • parse_ctx.begin() указывает на начало format-spec поля замены, форматируемого в строке формата.
  • Если format-spec отсутствует или пуст, то либо parse_ctx.begin() == parse_ctx.end(), либо *parse_ctx.begin() == '}'.
fmt_ctx lvalue типа FmtCtx
Выражение Тип возвращаемого значения Семантика
f.format(t, fmt_ctx) FmtCtx::iterator
  • Форматирует t согласно спецификаторам, сохранённым в f, записывает результат в fmt_ctx.out() и возвращает конечный итератор выходного диапазона.
  • Результат может зависеть только от
    • t,
    • fmt_ctx.locale(),
    • диапазона [parse_ctx.begin(), parse_ctx.end()) после последнего вызова f.parse(parse_ctx) и
    • fmt_ctx.arg(n) для любого значения n типа std::size_t.
f.format(arg, fmt_ctx) FmtCtx::iterator Как выше, но не изменяет arg.

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.

Отчёт об ошибке Применён к Опубликованное поведение Корректное поведение
LWG 3892 C++20 значение pc.begin() было неясно, если format-spec отсутствует уточнено

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/Formatter

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API