其目标之一是提供printf的替代品,这意味着format可以解析为printf设计的格式化字符串,将其应用于给定的参数,并生成与printf相同的结果。
当我使用相同的格式化字符串比较boost:format和printf的输出时,我得到了不同的输出。在线示例在这里。
#include <iostream>
#include <boost/format.hpp>
int main()
{
boost::format f("BoostFormat:%d:%X:%c:%d");
unsigned char cr =65; //'A'
int cr2i = int(cr);
f % cr % cr % cr % cr2i;
std::cout << f << std::endl;
printf("Printf:%d:%X:%c:%d",cr,cr,cr,cr2i);
}
输出结果为:
BoostFormat:
A:A:A:65
printf: 65:41:A:65
不同之处在于当我想将char显示为整数类型时。为什么会有差异?这是一个bug还是预期行为?
operator%
的(编译时)重载。现在你可以隐藏这个问题,但这会增加显著的复杂性 - 你必须在编译时实现可能的重载方案,并在运行时选择正确的方案。这也不是空间高效的。 - MSaltersf % +cr % +cr % cr % +cr;
- Peter Nimmo