Функция vformat
Функция vformat форматирует данные и возвращает
результат в виде строки. В отличие от функции format,
которая принимает переменное число аргументов напрямую,
функция vformat принимает объект va_list,
содержащий список аргументов переменной длины.
В первый параметр мы передаем строку формата, а во второй
- объект va_list с аргументами для подстановки.
Функция возвращает отформатированную строку типа std::string.
Функция vformat особенно полезна при написании
собственных функций, которые принимают переменное число
аргументов, так как позволяет передать этот список
в функцию форматирования без потери информации о типах.
Синтаксис
std::string vformat(fmt::string_view format_str, fmt::format_args args)
Пример
Давайте отформатируем строку с помощью функции vformat,
передав в неё строку формата "{} {}" и объект
fmt::make_format_args с двумя аргументами:
#include <iostream>
#include <fmt/format.h>
using namespace std;
int main()
{
string res = fmt::vformat("{} {}", fmt::make_format_args("abcde", 12345));
cout << res << endl;
return 0;
}
Результат выполнения кода:
"abcde 12345"
Пример
Давайте напишем собственную функцию, которая принимает
переменное число аргументов и внутри использует
функцию vformat для форматирования строки:
#include <iostream>
#include <fmt/format.h>
using namespace std;
template <typename... Args>
string my_format(string format_str, Args&&... args)
{
return fmt::vformat(format_str, fmt::make_format_args(args...));
}
int main()
{
string res = my_format("{} + {} = {}", 1, 2, 3);
cout << res << endl;
return 0;
}
Результат выполнения кода:
"1 + 2 = 3"