Namensräume
Varianten
Aktionen

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

Von cppreference.com
 
 
C++ benannte Anforderungen
 

BasicFormatter ist ein Typ, der Formatierungsoperationen für einen gegebenen Argumenttyp und Zeichentyp abstrahiert. Spezialisierungen von std::formatter müssen die Anforderungen von BasicFormatter erfüllen.

Ein BasicFormatter ist ein Formatter, wenn er sowohl konstante als auch nicht-konstante Argumente formatieren kann.

[bearbeiten] Anforderungen

Ein Typ erfüllt BasicFormatter, wenn er semiregular ist, was bedeutet, dass er Folgendes erfüllt:

Und, unter den folgenden Typen und Werten, sind die in der folgenden Tabelle gezeigten Ausdrücke gültig und haben die angegebene Semantik

Typ Definition
CharT ein Zeichentyp
Arg ein Argumenttyp für die Formatierung
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
g ein Wert vom Typ 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 Ersatzfeldes, das in der Formatzeichenkette formatiert wird.
  • Wenn format-spec nicht vorhanden oder leer ist, dann gilt entweder parse_ctx.begin() == parse_ctx.end() oder *parse_ctx.begin() == '}'.
fmt_ctx ein lvalue vom Typ FmtCtx
Ausdruck Rückgabetyp Semantik
g.parse(parse_ctx) ParseCtx::iterator 
  • Im Bereich [parse_ctx.begin()parse_ctx.end()), parst die format-spec für den Typ Arg bis zum ersten nicht übereinstimmenden Zeichen.
  • Wirft std::format_error, es sei denn, der gesamte Bereich wird geparst oder das nicht übereinstimmende Zeichen ist }. [Anmerkung 1]
  • Speichert die geparsten Formatierungsangaben in g und gibt einen End-Iterator des geparsten Bereichs zurück.
f.format(arg, fmt_ctx) FmtCtx::iterator
  • Formatiert arg gemäß den in f gespeicherten Angaben, schreibt die Ausgabe in fmt_ctx.out() und gibt einen End-Iterator des Ausgabebereichs zurück.
  • Die Ausgabe soll nur von Folgendem abhängen:
    • arg,
    • fmt_ctx.locale(),
    • der Bereich [parse_ctx.begin()parse_ctx.end()) aus dem letzten Aufruf von f.parse(parse_ctx), und
    • fmt_ctx.arg(n) für jeden Wert n vom Typ std::size_t.
  1. Dies ermöglicht Formatierern, aussagekräftige Fehlermeldungen auszugeben.

[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 war wurde klargestellt