如何从 fmt::format_args 获取参数的命名列表
How to get named list of arguments from fmt::format_args
我正在尝试为 Logz.IO 构建 C++ 日志记录集成,它使用命名参数进行字符串插值,我想利用 fmt
进行参数解析和格式化。本质上,我正在尝试构建允许我传递命名参数的函数,例如
log_fmt("Length: {Length:.2f}", fmt::arg("Length", 125.5f));
我按照文档构建了模板化函数和我自己的日志记录函数:
template <typename S, typename... Args>
void log_fmt(const S& format, Args&&... args) {
vlog(level, format,
fmt::make_args_checked<Args...>(format, args...));
}
void vlog(fmt::string_view format, fmt::format_args args) {}
在我的 vlog
实现中,我想将 args
转换为 JSON 对象,它将包含所有参数(最好没有格式化部分):
{
"Length": 125.5
}
但是看起来 format_args
只公开了非常基本的 public 接口(只允许 get
。我如何遍历 args
并获取每个参数名称和值?
{fmt} 不提供 API 来迭代命名参数,但您可以在 log_fmt
中自行完成。每个命名参数都有 the following type:
template <typename Char, typename T> struct named_arg : view {
const Char* name;
const T& value;
named_arg(const Char* n, const T& v) : name(n), value(v) {}
};
我正在尝试为 Logz.IO 构建 C++ 日志记录集成,它使用命名参数进行字符串插值,我想利用 fmt
进行参数解析和格式化。本质上,我正在尝试构建允许我传递命名参数的函数,例如
log_fmt("Length: {Length:.2f}", fmt::arg("Length", 125.5f));
我按照文档构建了模板化函数和我自己的日志记录函数:
template <typename S, typename... Args>
void log_fmt(const S& format, Args&&... args) {
vlog(level, format,
fmt::make_args_checked<Args...>(format, args...));
}
void vlog(fmt::string_view format, fmt::format_args args) {}
在我的 vlog
实现中,我想将 args
转换为 JSON 对象,它将包含所有参数(最好没有格式化部分):
{
"Length": 125.5
}
但是看起来 format_args
只公开了非常基本的 public 接口(只允许 get
。我如何遍历 args
并获取每个参数名称和值?
{fmt} 不提供 API 来迭代命名参数,但您可以在 log_fmt
中自行完成。每个命名参数都有 the following type:
template <typename Char, typename T> struct named_arg : view {
const Char* name;
const T& value;
named_arg(const Char* n, const T& v) : name(n), value(v) {}
};