Spec-Zone.ru › C++

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 неправильное форматирование вложенных диапазонов исправлено

См. также

formatter
(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

Spec-Zone.ru

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