如何清除(字符串)流上的所有粘性操纵器

How to clear all sticky manipulators on (string)stream?

本文关键字:操纵 有粘性 字符串 何清除 清除      更新时间:2023-10-16

我正在以通常的方式清除std::stringstream

std::ostringstream ss;
for(...; ...; ...) {
    ... // Use ss.
    if(some_condition_to_reset_stringstream) {
        ss.str(std::string());
        ss.clear();
    }
    ... // Use ss some more.
}

不幸的是,这并不能清除任何粘性操纵器(std::hexstd::setfill等)

有没有办法重置整个std::stringstream,包括任何IO操纵器?或者我必须单独手动重置每个操纵器(希望在这个过程中不要忘记任何一个)?

显然,在C++11中应该可以交换字符串流:

if(some_condition_to_reset_stringstream) {
    std::ostringstream().swap(ss);
}

不幸的是,我没有支持这一点的编译器(g++4.8.2),所以我无法测试这是否会清除粘性操纵器(我不明白为什么它一旦实现就不应该清除)。

仍在寻找替代方案,因为我的编译器不支持它:)