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.

Эта специализация соответствует требованиям Formatter, если (std::formattable<const Ts, CharT> && ...) является true. Она всегда соответствует требованиям BasicFormatter.

Спецификация форматирования

Синтаксис 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: указывает, что открывающая и закрывающая скобки должны быть "", а разделитель — ": ".
    • Если в качестве tuple-type выбрано m, программа некорректна, если только sizeof...(Ts) == 2 не является true.
  • n: указывает, что разделитель, открывающая и закрывающая скобки должны быть "".

Объекты-члены

Имя члена Определение
underlying_ (закрытый) кортеж базовых средств форматирования типа std::tuple<std::formatter<std::remove_cvref_t<Ts>,CharT>...>
(объект-член, используемый только для описания*)
separator_ (закрытый) строка, представляющая разделитель форматированного результата для кортежа (по умолчанию ", ")
(объект-член, используемый только для описания*)
opening-bracket_ (закрытый) строка, представляющая открывающую скобку форматированного результата для кортежа (по умолчанию "(")
(объект-член, используемый только для описания*)
closing-bracket_ (закрытый) строка, представляющая закрывающую скобку форматированного результата для кортежа (по умолчанию ")")
(объект-член, используемый только для описания*)

Функции-члены

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 ) -> 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 >
FormatContext::iterator
format( /*maybe-const-pair-or-tuple*/<Ts...>& elems, FormatContext& ctx ) const;

/*maybe-const-pair-or-tuple*/ обозначает:

  • const/*pair-or-tuple*/, если (std::formattable<const Ts, CharT> && ...) является true,
  • /*pair-or-tuple*/ в противном случае.

Записывает в ctx.out() в указанном tuple-format-spec порядке:

  • opening-bracket_,
  • для каждого индекса I в [0, sizeof...(Ts)):
    • если I != 0, separator_,
    • результат записи std::get<I>(elems) с помощью std::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/cpp/utility/format/tuple_formatter

Spec-Zone.ru

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