Boost.Format 的编译时检查

Compile-time checking of Boost.Format

本文关键字:检查 编译 Format Boost      更新时间:2023-10-16

Clang和GCC都可以检查printf风格的函数的格式字符串和参数之间的不匹配。 例如,他们会抱怨这样的陈述:

printf("Hello, %s!n");

Boost.Format是否存在类似的内容? 换句话说,是否有任何编译器开关、静态分析工具等可以警告代码,例如

std::string s1 = str(boost::format("Hello, %s!"));

std::string s2 = str(boost::format("Hello, %s!") % "John" % "Doe");

看起来不受支持在提升时也创建了一个票证来跟踪它。如果您真的需要,您可能需要选择中继版本。

https://svn.boost.org/trac/boost/ticket/6815

这在

Boost 格式中是不可能的,但 {fmt} 格式库在精神上相似,但使用类似 Python 的格式字符串语法提供了编译时检查。

例如:

#include std::string s = format(FMT_STRING("{2}"), 42);

给出编译时错误,因为格式字符串引用未提供的参数 2。

免责声明:我是 {fmt} 的作者