std::format_to
| Definiert in Header <format> |
||
| template< class OutputIt, class... Args > OutputIt format_to( OutputIt out, |
(1) | (seit C++20) |
| template< class OutputIt, class... Args > OutputIt format_to( OutputIt out, |
(2) | (seit C++20) |
| template< class OutputIt, class... Args > OutputIt format_to( OutputIt out, const std::locale& loc, |
(3) | (seit C++20) |
| template< class OutputIt, class... Args > OutputIt format_to( OutputIt out, const std::locale& loc, |
(4) | (seit C++20) |
Formatiere args gemäß der Formatzeichenkette fmt und schreibe das Ergebnis in den Ausgabiterator out. Wenn vorhanden, wird loc für die lokalabhängige Formatierung verwendet.
Äquivalent zu
Sei CharT char für die Überladungen (1,3) und wchar_t für die Überladungen (2,4).
Diese Überladungen nehmen nur an der Überladungsauflösung teil, wenn OutputIt das Konzept std::output_iterator<const CharT&> erfüllt.
Wenn eine der folgenden Bedingungen erfüllt ist, ist das Verhalten undefiniert
-
OutputItmodelliert nicht std::output_iterator<const CharT&>. - std::formatter<Ti, CharT> erfüllt die Anforderungen an BasicFormatter (wie von std::make_format_args und std::make_wformat_args gefordert) für einige
TiinArgsnicht.
Inhalt |
[edit] Parameter
| out | - | Iterator auf den Ausgabepuffer | ||||||||||||||||||||||||||||||||||||||||||||||
| fmt | - |
Jedes Ersetzungsfeld hat das folgende Format:
1) Ersetzungsfeld ohne Formatangabe
2) Ersetzungsfeld mit Formatangabe
| ||||||||||||||||||||||||||||||||||||||||||||||
| args... | - | zu formatierende Argumente | ||||||||||||||||||||||||||||||||||||||||||||||
| loc | - | std::locale, die für die lokale-spezifische Formatierung verwendet wird. | ||||||||||||||||||||||||||||||||||||||||||||||
[edit] Rückgabewert
Iterator hinter das Ende des Ausgabebereichs.
[edit] Ausnahmen
Gibt alle Ausnahmen weiter, die von Formatierer- oder Iteratoroperationen ausgelöst werden.
[edit] Anmerkungen
Gemäß P2216R3 ist es ein Fehler, wenn die Formatzeichenkette kein konstantes Ausdruck ist. std::vformat_to oder std::runtime_format(seit C++26) kann in diesem Fall verwendet werden.
[edit] Beispiel
#include <format> #include <iostream> #include <iterator> #include <string> int main() { std::string buffer; std::format_to ( std::back_inserter(buffer), // < OutputIt "Hello, C++{}!\n", // < fmt "20" // < arg ); std::cout << buffer; buffer.clear(); std::format_to ( std::back_inserter(buffer), // < OutputIt "Hello, {0}::{1}!{2}", // < fmt "std", // < arg {0} "format_to()", // < arg {1} "\n", // < arg {2} "extra param(s)..." // < unused ); std::cout << buffer << std::flush; std::wstring wbuffer; std::format_to ( std::back_inserter(wbuffer),// < OutputIt L"Hello, {2}::{1}!{0}", // < fmt L"\n", // < arg {0} L"format_to()", // < arg {1} L"std", // < arg {2} L"...is not..." // < unused L"...an error!" // < unused ); std::wcout << wbuffer; }
Ausgabe
Hello, C++20! Hello, std::format_to()! Hello, std::format_to()!
[edit] 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 3539 | C++20 | out konnte kein Move-only-Iterator sein | er kann es sein |
| P2216R3 | C++20 | wirft std::format_error für ungültige Formatzeichenkette. | führt stattdessen zu einem Compile-Zeitfehler |
| P2418R2 | C++20 | Objekte, die weder const-benutzbar noch kopierbar sind. (wie Generator-ähnliche Objekte) sind nicht formatierbar |
Ermöglichen der Formatierung dieser Objekte |
| P2508R1 | C++20 | Es gibt keinen benutzerseitig sichtbaren Namen für diese Einrichtung | Der Name basic_format_string wird verfügbar gemacht |
[edit] Siehe auch
| (C++20) |
speichert die formatierte Darstellung der Argumente in einem neuen String (Funktionstemplate) |
| (C++20) |
schreibt die formatierte Darstellung ihrer Argumente über einen Output-Iterator, überschreitet nicht die angegebene Größe (Funktionstemplate) |