创建一个字符串流副本
Create a stringstream duplicate
我知道我无法复制 stringstream
,但我想知道是否可以复制它以便创建两个具有相似输出说明符的字符串。
像这样
std::stringstream s1;
s1 << std::scientific << std::setprecision(4);
s1 << 0.01;
// Later on I want to create s2 given s1
std::stringstream s2;
// Copy formatting specifiers from s1 to s2, so that the effect is
// s2 << std::scientific << std::setprecision(4);
s2 << 0.02;
我的原因是我正在编写一个接受字符串流的函数,我想在修改字符串流之前知道一些输出的宽度。
我已经在此处查看了 stringstream
上的大部分问题,但找不到针对此特定案例的答案。
您可以使用继承自 std::basic_ios<CharT,Traits>
的 copyfmt
方法。
您可以copyfmt
- 复制格式信息。
s2.copyfmt(s1);
或者,您可以使用以下方法保存和恢复标志:
std::ios_base::fmtflags f = s1.flags();
s2.flags(f);
我知道我无法复制 stringstream
,但我想知道是否可以复制它以便创建两个具有相似输出说明符的字符串。
像这样
std::stringstream s1;
s1 << std::scientific << std::setprecision(4);
s1 << 0.01;
// Later on I want to create s2 given s1
std::stringstream s2;
// Copy formatting specifiers from s1 to s2, so that the effect is
// s2 << std::scientific << std::setprecision(4);
s2 << 0.02;
我的原因是我正在编写一个接受字符串流的函数,我想在修改字符串流之前知道一些输出的宽度。
我已经在此处查看了 stringstream
上的大部分问题,但找不到针对此特定案例的答案。
您可以使用继承自 std::basic_ios<CharT,Traits>
的 copyfmt
方法。
您可以copyfmt
- 复制格式信息。
s2.copyfmt(s1);
或者,您可以使用以下方法保存和恢复标志:
std::ios_base::fmtflags f = s1.flags();
s2.flags(f);