首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从fmt::format_args获取参数的命名列表

如何从fmt::format_args获取参数的命名列表
EN

Stack Overflow用户
提问于 2022-02-10 16:38:00
回答 1查看 185关注 0票数 1

我正在尝试为C++日志集成构建Logz.IO,它使用命名参数进行字符串内插,我想利用fmt进行参数解析和格式化。本质上,我试图构建一个函数,允许我传递命名的参数。

代码语言:javascript
复制
log_fmt("Length: {Length:.2f}", fmt::arg("Length", 125.5f));

我按照文档构建模板函数和自己的日志功能:

代码语言:javascript
复制
  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对象(理想情况下不包含格式化部分):

代码语言:javascript
复制
{
    "Length": 125.5
}

但是,看起来format_args只公开了非常基本的公共接口(只允许get )。我如何在args上迭代并获得每个参数名和值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-10 21:08:53

{fmt}不提供用于迭代命名参数的API,但可以在log_fmt中自己执行。每个命名参数都有以下类型

代码语言:javascript
复制
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) {}
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71068892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档