【发布时间】:2015-11-05 10:50:03
【问题描述】:
以本地化方式格式化std::*stream 输出的最佳方式(如果有)是什么,这样一个位置的格式更改不会影响在其他位置使用该流?
也就是说,我想为单个语句设置流的格式,而不是为流的剩余生命周期设置。
以下只是提出上述问题的理由。
假设您以默认浮点格式打印强度:
ostringstream oss;
oss << "Intensity = " << intensity << "; ";
然后以固定的 2 位精度打印坐标:
oss << "Point = (" << fixed << setprecision(2) << pt.x << ", " << pt.y << "); ";
然后,20 行之后,以相同的固定 2 位格式打印光线方向:
oss << "Direction = (" << dir.x << ", " << dir.y << "); ";
几个月后,在在打印pt和打印dir之间的某处添加默认浮点格式的亮度打印:
oss << "Luminosity = " << lum << "; ";
糟糕,lum 将以固定的 2 位精度打印,因为您之前在打印 pt 时更改了 oss 格式 20 行。现在您必须回忆您在oss 中所做的更改,然后将其倒回以打印lum。
此外,在为lum 修复格式后,您会遇到另一个问题:dir 将不再以固定的 2 位数字打印...
因此,我希望能够在本地格式化流以避免不必要的依赖。
【问题讨论】: