Namespaces
Variants

std:: formatter < pair-or-tuple >

From cppreference.net
Definiert im Header <format>
template < class CharT, std:: formattable < CharT > ... Ts >
struct formatter < /*pair-or-tuple*/ < Ts... > , CharT > ;
(seit C++23)

Die Template-Spezialisierung von std::formatter für std::pair und std::tuple ermöglicht es Benutzern, ein Paar oder ein Tupel in seine textuelle Darstellung als Sammlung von Elementen unter Verwendung von Formatierungsfunktionen zu konvertieren.

Der ausschließlich für die Darstellung verwendete Name /*pair-or-tuple*/ bezeichnet entweder das Klassentemplate std::pair oder std::tuple .

Diese Spezialisierung erfüllt die Formatter Anforderungen, falls ( std:: formattable < const Ts, CharT > && ... ) true ergibt. Sie erfüllt stets die BasicFormatter Anforderungen.

Inhaltsverzeichnis

Formatspezifikation

Die Syntax von tuple-format-spec lautet:

tuple-fill-and-align  (optional) width  (optional) tuple-type  (optional)

Das tuple-fill-and-align wird auf die gleiche Weise interpretiert wie ein fill-and-align , mit der Ausnahme, dass das fill in tuple-fill-and-align jedes Zeichen außer { , } oder : ist.

Die width wird in der standard format width specification beschrieben.

Der tuple-type ändert die Art und Weise, wie ein Tupel formatiert wird, wobei bestimmte Optionen nur mit bestimmten Argumenttypen gültig sind.

Die verfügbaren Tupel-Präsentationstypen sind:

  • m : Gibt an, dass sowohl öffnende als auch schließende Klammern "" sein sollten, während das Trennzeichen ": " sein sollte.
  • Wenn m als der tuple-type gewählt wird, ist das Programm fehlerhaft, es sei denn, sizeof... ( Ts ) == 2 ist true .
  • n : Gibt an, dass Trennzeichen, öffnende und schließende Klammern "" sein sollen.

Member-Objekte

Mitgliedername Definition
underlying_ (privat) Tupel von zugrundeliegenden Formatierern vom Typ std:: tuple < std:: formatter < std:: remove_cvref_t < Ts > , CharT > ... >
( Nur zur Darstellung verwendetes Mitgliedsobjekt* )
separator_ (privat) Ein String, der den Separator des formatierten Tupelergebnisses darstellt (Standardwert: ", " )
( Nur zur Darstellung verwendetes Mitgliedsobjekt* )
opening-bracket_ (privat) Ein String, der die öffnende Klammer des formatierten Tupelergebnisses darstellt (Standardwert: "(" )
( Nur zur Darstellung verwendetes Mitgliedsobjekt* )
closing-bracket_ (privat) Ein String, der die schließende Klammer des formatierten Tupelergebnisses darstellt (Standardwert: ")" )
( Nur zur Darstellung verwendetes Mitgliedsobjekt* )

Memberfunktionen

set_separator
setzt einen bestimmten Separator für das formatierte Tupelergebnis
(öffentliche Elementfunktion)
set_brackets
setzt bestimmte öffnende und schließende Klammern für das formatierte Tupelergebnis
(öffentliche Elementfunktion)
parse
parst den Formatbezeichner wie durch tuple-format-spec angegeben
(öffentliche Elementfunktion)
format
schreibt die formatierte Tupelausgabe wie durch tuple-format-spec angegeben
(öffentliche Elementfunktion)

std::formatter< pair-or-tuple >:: set_separator

constexpr void set_separator ( std:: basic_string_view < CharT > sep ) noexcept ;

Weist sep dem separator_ zu.

std::formatter< pair-or-tuple >:: set_brackets

constexpr void set_brackets ( std:: basic_string_view < CharT > opening,
std:: basic_string_view < CharT > closing ) noexcept ;

Weist opening und closing jeweils opening-bracket_ und closing-bracket_ zu.

std::formatter< pair-or-tuple >:: parse

template < class ParseContext >
constexpr auto parse ( ParseContext & ctx ) - > ParseContext :: iterator ;

Parst die Format-Spezifizierer als einen tuple-format-spec und speichert die geparsten Spezifizierer im aktuellen Objekt.

Falls tuple-type oder die n -Option vorhanden sind, werden die Werte von opening-bracket , closing-bracket und separator entsprechend angepasst.

Ruft für jedes Element e in underlying_ e. parse ( ctx ) auf, um einen leeren format-spec zu parsen, und falls e. set_debug_format ( ) ein gültiger Ausdruck ist, ruft es e. set_debug_format ( ) auf.

Gibt einen Iterator zurück, der über das Ende des tuple-format-spec hinauszeigt.

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*/ bezeichnet:

  • const /*pair-or-tuple*/ , falls ( std:: formattable < const Ts, CharT > && ... ) true ist,
  • /*pair-or-tuple*/ andernfalls.

Schreibt Folgendes in ctx. out ( ) gemäß tuple-format-spec , in dieser Reihenfolge:

  • opening-bracket_ ,
  • für jeden Index I in [ 0 , sizeof... ( Ts ) ) :
  • falls I ! = 0 , separator_ ,
  • das Ergebnis des Schreibens von std :: get < I > ( elems ) über std :: get < I > ( underlying_ ) , und
  • closing-bracket_ .

Gibt einen Iterator zurück, der hinter den Ausgabebereich zeigt.

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 3892 C++23 die Formatierung verschachtelter Tupel war fehlerhaft korrigiert

Siehe auch

(C++20)
definiert Formatierungsregeln für einen gegebenen Typ
(Klassentemplate)