我正在为我的班级编写一个打印方法,例如:
std::ostream& operator<<(std::ostream& stream, const MyClass& M);
在内部我需要创建一个中间stringstream
,以便我稍后将我得到的字符串放到stream
中的正确位置。但stream
可能有一些非默认设置,如精度,字段宽度,数字格式等。
如何将所有此类格式设置从stream
复制到stringstream
,而无需为每个设置手动执行“读取和设置”?
答案 0 :(得分:5)
您可以使用 copyfmt() 将格式选项从一个流复制到另一个流:
std::ostream& operator<<(std::ostream& stream, const MyClass& M) {
std::ostringstream tmp; // temporary string stream
tmp.copyfmt(stream); // COPY FORMAT of origninal stream
... // rest of your code
}
立即复制所有格式选项,例如:
MyClass o;
...
std::cout.fill('*');
std::cout.width(10);
std::cout << o<<std::endl; // stringstream rendering would use fill and width here
std::cout << std::hex << o << std::dec <<std::endl; // and even hex conversion here