由于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');