【发布时间】: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 以满足您的特定需求?