std::formatter<pair-or-tuple>
Определено в заголовке <format> | ||
|---|---|---|
template< class CharT, std::formattable<CharT>... Ts > struct formatter</*pair-or-tuple*/<Ts...>, CharT>; | (с C++23) |
Шаблонная специализация std::formatter для std::pair и std::tuple позволяет пользователям преобразовывать пару или кортеж в его текстовое представление как набор элементов, используя функции форматирования.
Именованный только для справок /*pair-or-tuple*/ обозначает шаблон класса std::pair или std::tuple.
Спецификация формата
Синтаксис tuple-format-spec:
| tuple-fill-and-align (необязательно) width (необязательно) tuple-type (необязательно) |
tuple-fill-and-align интерпретируется так же, как fill-and-align, за исключением того, что fill в tuple-fill-and-align — любой символ, кроме {, }, или :.
width описан в стандартной спецификации ширины формата.
tuple-type изменяет способ форматирования кортежа, с определёнными опциями, допустимыми только для определённых типов аргументов.
Доступные типы представления кортежа:
-
m: Указывает, что открывающие и закрывающие скобки должны быть"", а разделитель —": ". - Если
mвыбран в качестве tuple-type, программа некорректна, еслиsizeof...(Ts) == 2неtrue. -
n: Указывает, что разделитель, открывающие и закрывающие скобки должны быть"".
Члены-объекты
| Имя члена | Определение |
|---|---|
underlying_ (private) | Кортеж форматирующих объектов типа std::tuple<std::formatter<std::remove_cvref_t<Ts>, CharT>...>(иллюстративный член-объект*) |
separator_ (private) | Строка, представляющая разделитель отформатированного результата кортежа (значение по умолчанию — ", ")(иллюстративный член-объект*) |
opening-bracket_ (private) | Строка, представляющая открывающую скобку отформатированного результата кортежа (значение по умолчанию — "(")(иллюстративный член-объект*) |
closing-bracket_ (private) | Строка, представляющая закрывающую скобку отформатированного результата кортежа (значение по умолчанию — ")")(иллюстративный член-объект*) |
Члены-функции
| set_separator | Устанавливает указанный разделитель для отформатированного результата кортежа (публичная функция-член) |
| set_brackets | Устанавливает указанные открывающую и закрывающую скобки для отформатированного результата кортежа (публичная функция-член) |
| parse | Разбирает спецификатор формата как tuple-format-spec и сохраняет разобранные спецификаторы в текущем объекте. (публичная функция-член) |
| format | Выводит отформатированный результат кортежа, как указано в tuple-format-spec (публичная функция-член) |
std::formatter<pair-or-tuple>::set_separator
constexpr void set_separator( std::basic_string_view<CharT> sep ) noexcept; |
Присваивает sep к separator_.
std::formatter<pair-or-tuple>::set_brackets
constexpr void set_brackets( std::basic_string_view<CharT> opening,
std::basic_string_view<CharT> closing ) noexcept;
|
Присваивает opening и closing к opening-bracket_ и closing-bracket_, соответственно.
std::formatter<pair-or-tuple>::parse
template< class ParseContext > constexpr auto parse( ParseContext& ctx ) -> typename ParseContext::iterator; |
Разбирает спецификаторы формата как tuple-format-spec и сохраняет разобранные спецификаторы в текущем объекте.
Если присутствует tuple-type или опция n, значения opening-bracket, closing-bracket, и separator изменяются по мере необходимости.
Для каждого элемента e в underlying_, вызывается e.parse(ctx) для разбора пустой format-spec и, если e.set_debug_format() является допустимым выражением, вызывается e.set_debug_format().
Возвращает итератор, следующий за концом tuple-format-spec.
std::formatter<pair-or-tuple>::format
template< class FormatContext >
auto format( /* see below */& elems, FormatContext& ctx ) const
-> typename FormatContext::iterator;
|
Если (std::formattable<const Ts, CharT> && ...) равно true, тогда тип elems — const /*pair-or-tuple*/<Ts...>&. В противном случае, тип — /*pair-or-tuple*/<Ts...>&.
Записывает следующее в ctx.out() согласно tuple-format-spec, в порядке:
-
opening-bracket_, - для каждого индекса
Iв полуоткрытом интервале[0, sizeof...(Ts)): - если
I != 0,separator_, - результат записи
get<I>(elems)черезget<I>(underlying_), и -
closing-bracket_.
Возвращает итератор, следующий за концом диапазона вывода.
Отчёты об ошибках
Следующие поправки, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение, как опубликовано | Корректное поведение |
|---|---|---|---|
| LWG 3892 | C++23 | неправильное форматирование вложенных диапазонов | исправлено |
См. также
|
(C++20) | определяет правила форматирования для данного типа (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/format/tuple_formatter