У меня есть подкласс, основанный на ostream, который фиксирует отладочные сообщения моей программы.Как очистить ostream при сбое приложения
/** @brief Customized output stream with "tee" feature */
template <typename CharT, typename Traits = std::char_traits<CharT> >
class basic_tostream : public std::basic_ostream<CharT, Traits> {
public:
basic_tostream(std::basic_ostream<CharT, Traits> & o1, /**< main ostream */
std::basic_ostream<CharT, Traits> & o2 /**< teed ostream */)
: std::basic_ostream<CharT, Traits>(&tbuf), tbuf(o1.rdbuf(), o2.rdbuf())
{ /* empty */ }
private:
tee_outbuf<CharT, Traits> tbuf;
}; // end_class: basic_tostream
Как я использую этот класс:
std::ofstream debugFile("debug.txt")
tostream tout(std::cout, debugFile);
/* computation */
tout << "message\n";
/* other computation */
Выпуск: Класс прекрасно работают при выходе из приложения обычно. Но в случае сбоя (например, индекс массива из привязанного и т. Д.), «Tout» распечатывал все сообщения на консоли, но «debugFile» не отображает всю распечатку.
Вопрос: Итак, как правильно очистить буфер ostream до выходного файла в случае сбоя приложения?
Вы правы. 'endl' выводит новую строку и очищает поток. – chris