Като лесен начин за съхраняване на няколко журнала за състояние и т.н. избрах std::stringstream
. В случай на грешка мога просто да изхвърля .rdbuf()
във файл, за да мога да възпроизведа какво е правила моята програма, преди да се срине.
Моят проблем сега е, че този поток от низове нараства по размер за неопределено време. Опитах няколко неща, за да се уверя, че запазвам само последните около 1 MiB от потока, но не успях.
.rdbuf()->pubseekoff(...)
.ignore(...)
getline(...)
ss.str() = ss.str().substr(...)
Очевидно основният буферен обект винаги само се увеличава по размер - без значение дали някои от данните вече са били прочетени или не.
Има ли някакъв начин да намалите размера/да го задържите на някаква константа (за предпочитане без редовни дълбоки копия)? Кръговият буфер като основен буферен обект би бил идеален - възможно ли е? Esp. това съществува ли вече?
РЕДАКТИРАНЕ: Решението основно трябва да се държи като поток. Поставя се от прокомпилатора вместо std::err или директен файлов поток (подобно на boost::log). Следователно не е строго необходимо, но много полезно да се използва поток от низове. (В противен случай ще трябва да внедря всички неща от ostream, за да мога да предавам поточно std::endl...)
std::ofstream
и вместо това да изчистите директно в лог файл? - person AJG85   schedule 12.09.2013oss.str(""); oss.clear();
за нулиране. - person AJG85   schedule 12.09.2013