3

由于iomanip流修饰符的原始使用是 a) 冗长和 b) 容易出错(粘性与非粘性等),对于用户定义的类型,所有这些东西都可以隐藏在默认值中operator<<......如图所示,例如

但是,在格式化内置类型时(即使在用户定义的运算符中),使用类似于(beware C++14)的方法会更方便(恕我直言) ,其中数据被包装在函数调用中返回一个临时对象,该对象设置 + 重置适当的标志。std::quoted

本质上,而不是

std::cout << std::setprecision(2) << std::fixed << 1.23456 << "\n";

你会假设写:

using namespace shorter;
std::cout << precis(2, fixed(1.234556)) << "\n";

如示例所示,标志的组合可能会变得棘手,而且我确信魔鬼在细节中,所以我想知道是否有任何现有技术/现有的帮助库试图解决“雪佛龙地狱”。:-)

  • 是否有任何现有的图书馆解决这个问题?
  • 如果一个人想自己想出一套助手,这里有什么技术陷阱?

具体来说,这个问题与任何类型的“类型安全格式字符串”(如 Boost.Format 提供的)无关。

我也不是在要求一个“最好的”库,我是在询问任何为普通 ostream 做这件事的库。(因为我找不到任何东西。)

例如,C++ Format 的 write API做了这样的事情,但它不是为 std::iostreams 做的,而是为库的“stream”类型做的:

MemoryWriter out;
out << pad(hex(0xcafe), 8, '0');
4

0 回答 0