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 | форматирование вложенных кортежей было некорректным | исправлено |
См. также
|
(C++20) | задаёт правила форматирования для заданного типа (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/format/tuple_formatter