Я очищая 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::hex
, std::setfill
и т.д.).
Есть ли способ сбросить все std::stringstream
, включая любые IO-манипуляторы? Или мне нужно вручную сбросить каждый манипулятор по отдельности (надеюсь, не забывая об этом в процессе)?
Просто выбросьте поток струн и создайте новый. –
@MatteoItalia Строковый поток используется в цикле синтаксического анализа и должен быть сброшен на определенных итерациях, но не во всех. Поэтому, к сожалению, я не могу каждый раз создавать новую. – zennehoy
@zennehoy: вы можете сохранить исходные флаги и просто сбросить их с помощью 'std :: ostringstream :: flags'. Обратите внимание, что вы также должны сохранять ':: fill',' :: width' и ':: precision', если хотите вернуть все изменения. – Zeta