1

我正在清除一种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 操纵器?或者我是否必须单独手动重置每个机械手(希望在此过程中不要忘记任何机械手)?

4

1 回答 1

4

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

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

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

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

于 2015-07-01T10:00:47.683 回答