Namensräume
Varianten
Aktionen

C++ benannte Anforderungen: Formatter (seit C++20)

Von cppreference.com
 
 
C++ benannte Anforderungen
 

Formatter ist ein Typ, der Formatierungsoperationen für einen gegebenen Formatierungsargumenttyp und Zeichentyp abstrahiert. Spezialisierungen von std::formatter, die von der Standardbibliothek bereitgestellt werden, müssen die Anforderungen von Formatter erfüllen, sofern nicht anders angegeben.

Ein Formatter kann sowohl konstante als auch nicht-konstante Argumente formatieren, typischerweise durch Bereitstellung einer format-Memberfunktion, die eine konstante Referenz entgegennimmt.

[bearbeiten] Anforderungen

Ein Typ erfüllt Formatter, wenn er BasicFormatter erfüllt und bei gegebenen folgenden Typen und Werten die in der folgenden Tabelle gezeigten Ausdrücke gültig sind und die angezeigte Semantik haben.

Typ Definition
CharT ein Zeichentyp
Arg ein Formatierungsargumenttyp
Formatter ein Formatter-Typ für die Typen Arg und CharT
OutputIt ein LegacyOutputIterator-Typ
ParseCtx std::basic_format_parse_context<CharT>
FmtCtx std::basic_format_context<OutputIt, CharT>
Wert Definition
f ein Wert vom Typ (möglicherweise const-qualifiziert) Formatter
arg ein lvalue vom Typ Arg
t ein Wert vom Typ, der nach (möglicherweise const-qualifiziert) Arg konvertierbar ist
parse_ctx ein lvalue vom Typ ParseCtx, der alle folgenden Bedingungen erfüllt
  • parse_ctx.begin() zeigt auf den Anfang der format-spec des zu formatierenden Ersatzfeldes im Format-String.
  • Wenn format-spec nicht vorhanden oder leer ist, dann entweder parse_ctx.begin() == parse_ctx.end() oder *parse_ctx.begin() == '}'.
fmt_ctx ein lvalue vom Typ FmtCtx
Ausdruck Rückgabetyp Semantik
f.format(t, fmt_ctx) FmtCtx::iterator 
  • Formatiert t gemäß den in f gespeicherten Spezifikatoren, schreibt die Ausgabe nach fmt_ctx.out() und gibt einen End-Iterator des Ausgabebereichs zurück.
  • Die Ausgabe kann nur abhängen von
    • t,
    • fmt_ctx.locale(),
    • dem Bereich [parse_ctx.begin()parse_ctx.end()) vom letzten Aufruf von f.parse(parse_ctx), und
    • fmt_ctx.arg(n) für jeden Wert n vom Typ std::size_t.
f.format(arg, fmt_ctx) FmtCtx::iterator Wie oben, aber modifiziert arg nicht.

[bearbeiten] Fehlerberichte

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

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 3892 C++20 war der Wert von pc.begin() unklar, wenn format-spec nicht vorhanden ist wurde klargestellt