Ce face std::vformat
std::format verifică șablonul la compilare, deci nu acceptă un șablon citit dintr-un fișier sau ales la rulare. std::vformat primește șablonul ca text obișnuit și verifică totul la rulare.
Valorile se împachetează cu std::make_format_args(a, b, ...). Acestea trebuie să fie variabile (nu valori temporare precum 3 + 4), pentru că pachetul păstrează doar referințe la ele.
Dacă șablonul este greșit (acoladă neînchisă, prea multe marcaje, format nepotrivit), std::vformat aruncă excepția std::format_error.
Parametri
| Parametru | Descriere |
|---|---|
sablon |
Textul cu marcaje {}, poate fi orice șir de la rulare. |
argumente |
Rezultatul lui std::make_format_args(...). |
Ce returnează
Un std::string cu textul formatat. Aruncă std::format_error dacă șablonul nu este valid.
Exemple
Exemplul 1: Mesaj în limba aleasă
#include <format>
#include <map>
#include <print>
#include <string>
int main() {
std::map<std::string, std::string> sabloane = {
{"ro", "Bună, {}! Ai {} mesaje noi."},
{"en", "Hello, {}! You have {} new messages."},
};
std::string nume = "Ana";
int mesaje = 4;
for (const auto& [limba, sablon] : sabloane) {
std::println("{}: {}", limba, std::vformat(sablon, std::make_format_args(nume, mesaje)));
}
}
Rezultat
en: Hello, Ana! You have 4 new messages.
ro: Bună, Ana! Ai 4 mesaje noi.
Exemplul 2: Șablon greșit prins la rulare
#include <format>
#include <print>
#include <string>
int main() {
std::string sablon = "Total: {} lei, {}"; // două marcaje, o singură valoare
int total = 120;
try {
std::println("{}", std::vformat(sablon, std::make_format_args(total)));
} catch (const std::format_error& e) {
std::println("Șablon invalid: {}", e.what());
}
}
Rezultat
Șablon invalid: The argument index value is too large for the number of arguments supplied
Greșeli frecvente
- Dai valori temporare lui
make_format_args:std::make_format_args(x + 1)nu compilează. Pune valoarea întâi într-o variabilă. - Folosești
vformatpeste tot: pierzi verificarea la compilare. Păstrează-l doar pentru șabloanele care chiar se aleg la rulare.
Comenzi înrudite
std::format: Construiește un std::string dintr-un șablon cu acolade {} și valori (C++20).std::format_to: Scrie textul formatat direct într-un iterator de ieșire, de exemplu la finalul unui șir.std::println: Afișează text formatat cu acolade {} și trece pe rândul următor (C++23).