【问题标题】:Is it possible to retrieve the "width" from a format string是否可以从格式字符串中检索“宽度”
【发布时间】:2020-07-09 09:50:05
【问题描述】:

我需要一种从fmt::format 格式字符串中检索“宽度”参数的方法。

不想要格式操作的结果大小,很容易用auto size = fmt::formatted_size("{:>5.2f}", 13453453.76345f);提取

fmt::format("{:>5.2f}", 13.23454f);
//              ^
//     I want this number (5)

我期待这样的事情

auto width = fmt::with_arg("{:>5.2f}");
assert(width == 5);

还有... 如果它也适用于整数那就太好了:

fmt::format("{:>4d}", 42);
//              ^
//     I want this number (4)

【问题讨论】:

  • 您需要解决什么问题?为什么需要宽度?为什么不将宽度放入传递给format 函数的变量中(例如int width = 5; fmt::format("{:>{}.2f}", 13.23454f, width);)?那么就很容易得到宽度了。
  • @Someprogrammerdude,这正是我试图避免的。我尽量避免使用字符串中包含的信息重复其他参数。在格式字符串中添加{} 对格式字符串添加了过多的约束。
  • @user23573 您可以创建自己的函数 get_width(string fmt),在该函数中,您基本上可以通过放置一些浮点值然后测量结果字符串长度(或解析它们)来测量宽度。
  • @user23573 或者,您可以深入研究 fmt 以了解他们是如何做到的。也许修改 fmt 以满足您的特定需求?

标签: c++ fmt


【解决方案1】:

不,宽度在内部用于确定填充量。它不是通过任何公共 API 提供的。您可以使用parse_format_string 解析格式字符串并获取宽度,但这是一个内部函数。

【讨论】:

  • parse_format_string 正是我感兴趣的功能。有人有例子吗?
猜你喜欢
  • 1970-01-01
  • 2019-12-10
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
相关资源
最近更新 更多