std:: formatter
|
Definiert im Header
<format>
|
||
|
template
<
class
T,
class
CharT
=
char
>
struct formatter ; |
(seit C++20) | |
Die aktivierten Spezialisierungen von
std::formatter
definieren Formatierungsregeln für einen gegebenen Typ. Aktivierte Spezialisierungen erfüllen die
BasicFormatter
Anforderungen und, sofern nicht anders angegeben, auch die
Formatter
Anforderungen.
Für alle Typen
T
und
CharT
, für die keine Spezialisierung
std::formatter<T, CharT>
aktiviert ist, ist diese Spezialisierung ein vollständiger Typ und ist deaktiviert.
Deaktivierte Spezialisierungen erfüllen nicht die Formatter -Anforderungen, und folgendes ist alles false :
- std::is_default_constructible_v
- std::is_copy_constructible_v
- std::is_move_constructible_v
- std::is_copy_assignable_v
- std::is_move_assignable_v .
Inhaltsverzeichnis |
Grundlegende Standardspezialisierungen
In der folgenden Liste ist
CharT
entweder
char
oder
wchar_t
,
ArithmeticT
ist jeder cv-unqualifizierte arithmetische Typ außer
char
,
wchar_t
,
char8_t
,
char16_t
oder
char32_t
:
|
Zeichenformatierer
|
||
|
template
<>
struct formatter < char , char > ; |
(1) | |
|
template
<>
struct formatter < char , wchar_t > ; |
(2) | |
|
template
<>
struct formatter < wchar_t , wchar_t > ; |
(3) | |
|
Zeichenkettenformatierer
|
||
|
template
<>
struct formatter < CharT * , CharT > ; |
(4) | |
|
template
<>
struct formatter < const CharT * , CharT > ; |
(5) | |
|
template
<
std::
size_t
N
>
struct formatter < CharT [ N ] , CharT > ; |
(6) | |
|
template
<
class
Traits,
class
Alloc
>
struct formatter < std:: basic_string < CharT, Traits, Alloc > , CharT > ; |
(7) | |
|
template
<
class
Traits
>
struct formatter < std:: basic_string_view < CharT, Traits > , CharT > ; |
(8) | |
|
Arithmetische Formatierer
|
||
|
template
<>
struct formatter < ArithmeticT, CharT > ; |
(9) | |
|
Zeigerformatierer
|
||
|
template
<>
struct formatter < std:: nullptr_t , CharT > ; |
(10) | |
|
template
<>
struct formatter < void * , CharT > ; |
(11) | |
|
template
<>
struct formatter < const void * , CharT > ; |
(12) | |
Formatter für andere Zeiger und Zeiger auf Member sind deaktiviert.
Spezialisierungen wie std :: formatter < wchar_t , char > und std :: formatter < const char * , wchar_t > , die Kodierungsumwandlungen erfordern würden, sind deaktiviert.
|
Die folgenden Spezialisierungen sind in C++23 weiterhin deaktiviert, um zu vermeiden, dass bestimmte char -Sequenzen als Bereiche von wchar_t formatiert werden:
Eine
debug-fähige
Formatter-Spezialisierung bietet zusätzlich eine öffentliche nicht-statische Memberfunktion
constexpr
void
set_debug_format
(
)
;
, die den Zustand des Formatter-Objekts so modifiziert, dass es die Werte
maskiert und in Anführungszeichen
formatiert, als ob der
Typ
des Formatbezeichners, der durch den letzten Aufruf von
Jede Formatter-Spezialisierung für String- oder Zeichentypen ist debug-fähig . |
(seit C++23) |
Standardformat-Spezifikation
|
Dieser Abschnitt ist unvollständig
Grund: Die Standardformat-Spezifikation wurde auf eine separate Seite verschoben. Der Abschnittstitel wird vorübergehend beibehalten, um Verweise auf diesen Abschnitt zu ermöglichen. Dieser Abschnitt wird entfernt, nachdem alle diese Verweise bereinigt wurden. |
Standardspezialisierungen für Bibliothekstypen
Formatierungsunterstützung für
duration
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
sys_time
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
utc_time
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
tai_time
(Klassen-Templatespezialisierung) |
|
Formatierungsunterstützung für
gps_time
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
file_time
(Klassentemplate-Spezialisierung) |
|
Formatierungsunterstützung für
local_time
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
day
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
month
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
year
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
weekday
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
weekday_indexed
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
weekday_last
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
month_day
(Klassen-Templatespezialisierung) |
|
Formatierungsunterstützung für
month_day_last
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
month_weekday
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
month_weekday_last
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
year_month
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
year_month_day
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
year_month_day_last
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
year_month_weekday
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
year_month_weekday_last
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
hh_mm_ss
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
sys_info
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
local_info
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
zoned_time
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
basic_stacktrace
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
stacktrace_entry
(Klassen-Templatespezialisierung) |
|
|
(C++23)
|
Formatierungsunterstützung für
thread::id
(Klassen-Template-Spezialisierung) |
Formatierungsunterstützung für
vector<bool>::reference
(Klassen-Template-Spezialisierung) |
|
|
(C++23)
|
Formatierungsunterstützung für
pair
und
tuple
(Klassen-Template-Spezialisierung) |
|
(C++23)
|
Formatierungsunterstützung für Ranges
(Klassen-Template-Spezialisierung) |
|
(C++23)
|
Formatierungsunterstützung für
std::stack
(Klassen-Template-Spezialisierung) |
|
(C++23)
|
Formatierungsunterstützung für
std::queue
(Klassen-Template-Spezialisierung) |
Formatierungsunterstützung für
std::priority_queue
(Klassen-Template-Spezialisierung) |
|
Formatierungsunterstützung für
filesystem::path
(Klassen-Template-Spezialisierung) |
Beispiel
#include <algorithm> #include <format> #include <iomanip> #include <iostream> #include <sstream> #include <string_view> struct QuotableString : std::string_view {}; template<> struct std::formatter<QuotableString, char> { bool quoted = false; template<class ParseContext> constexpr ParseContext::iterator parse(ParseContext& ctx) { auto it = ctx.begin(); if (it == ctx.end()) return it; if (*it == '#') { quoted = true; ++it; } if (it != ctx.end() && *it != '}') throw std::format_error("Invalid format args for QuotableString."); return it; } template<class FmtContext> FmtContext::iterator format(QuotableString s, FmtContext& ctx) const { std::ostringstream out; if (quoted) out << std::quoted(s); else out << s; return std::ranges::copy(std::move(out).str(), ctx.out()).out; } }; int main() { QuotableString a("be"), a2(R"( " be " )"); QuotableString b("a question"); std::cout << std::format("To {0} or not to {0}, that is {1}.\n", a, b); std::cout << std::format("To {0:} or not to {0:}, that is {1:}.\n", a, b); std::cout << std::format("To {0:#} or not to {0:#}, that is {1:#}.\n", a2, b); }
Ausgabe:
To be or not to be, that is a question. To be or not to be, that is a question. To " \" be \" " or not to " \" be \" ", that is "a question".
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 3944 | C++23 | einige char -Sequenzen waren als Ranges von wchar_t formatierbar | hinzugefügte Spezialisierungen deaktiviert |
Siehe auch
|
(C++20)
(C++20)
(C++20)
|
Formatierungszustand, einschließlich aller Formatierungsargumente und des Ausgabeiterators
(Klassentemplate) |
|
(C++23)
|
spezifiziert, dass ein Typ formatierbar ist, d.h. er spezialisiert
std::formatter
und stellt Memberfunktionen
parse
und
format
bereit
(Konzept) |
|
(C++23)
|
Klassentemplate, das bei der Implementierung von
std::formatter
Spezialisierungen für Bereichstypen hilft
(Klassentemplate) |