Namespaces
Variants

std:: formatter < pair-or-tuple >

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

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

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

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

set_separator
задает указанный разделитель для форматированного вывода кортежа
(public member function)
set_brackets
задает указанные открывающую и закрывающую скобки для форматированного вывода кортежа
(public member function)
parse
разбирает спецификатор формата, как указано в tuple-format-spec
(public member function)
format
записывает форматированный вывод кортежа, как указано в tuple-format-spec
(public member function)

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 Applied to Behavior as published Correct behavior
LWG 3892 C++23 форматирование вложенных кортежей было некорректным исправлено

Смотрите также

(C++20)
определяет правила форматирования для заданного типа
(шаблон класса)