我正在尝试为C++日志集成构建Logz.IO,它使用命名参数进行字符串内插,我想利用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只公开了非常基本的公共接口(只允许get )。我如何在args上迭代并获得每个参数名和值?
发布于 2022-02-10 21:08:53
{fmt}不提供用于迭代命名参数的API,但可以在log_fmt中自己执行。每个命名参数都有以下类型
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) {}
};https://stackoverflow.com/questions/71068892
复制相似问题