如何在fmt::format调用中省略空字符串参数?
解决fmt::format省略空字符串参数的问题
你不能直接省略那两个空字符串参数,因为fmt::format要求格式字符串中的占位符数量和传入的参数数量严格匹配,少传参数会导致编译失败。不过可以用两种更简洁的方式实现需求,不需要传递无意义的空字符串:
方法一:直接生成重复字符作为参数
不用依赖占位符的填充语法,直接创建对应长度的*字符串传入,代码更直观:
#include <fmt/core.h> #include <string> int main() { auto output = fmt::format("{0}[Application Layer]{1}\n\n", std::string(5, '*'), std::string(51, '*')); // output就是开头5个*、中间[Application Layer]、后续51个*加两个换行的内容 }
方法二:固定长度场景直接写死字符
如果*的数量是固定的(5和51),可以直接在格式字符串中写满对应数量的*,完全不需要额外参数:
#include <fmt/core.h> int main() { // 注:第二个星号段正好是51个* auto output = fmt::format("*****[Application Layer]***************************************************\n\n"); }
原来的写法中,{:*<5}和{:*<51}是通过将空字符串填充到指定长度来生成*,但这种写法必须对应传入两个参数,所以不能直接省略。上面两种方法都能达到同样的输出效果,且避免了无意义的空参数传递。
内容的提问来源于stack exchange,提问作者digito_evo
相关产品推荐
相关产品推荐

