Вы получили правильный подход при использовании пользовательского класса буфера потока. Однако именно здесь вы хотите реализовать конкретную логику, а не в классе, производном от std::ostream
!
Просто чтобы объяснить, что происходит в данный момент: когда вы вызываете f(*this)
, функция f()
вызывается с базой std::ostream
, которая получает вывод и получает flush()
. Твой класс полностью за кадром.
Вот что вы должны сделать:
* удалите операторы вывода из вашего MyLogger
класса
* внедрите overflow()
в ваш потоковый буфер, чтобы справиться с переполнением его буфера (например, отправить символы куда-либо или увеличить буфер)
* реализовать sync()
для отправки любых буферизованных символов и делать все остальное, что вам нужно сделать, когда поток очищается
* вероятно MyLogger
должен иметь буфер потока и правильно настроить его вазу; как правило, это все класс, производный от std::ostream
делает
Было много примеров того, как это выглядит там. Ищите streambuf
и Джеймса Канзе или меня, чтобы найти пару.