Вопрос: Как я могу перенаправить std :: ofstream в std :: cout?


Я работаю с некоторым кодом, который использует глобальный регистратор отладки, который имеет тип std::ofstream*, Я хотел бы перенаправить это на std :: cout, поскольку я использую код в режиме реального времени, а не пакетный метод, для которого он был разработан.

Можно ли перенаправить глобальные std::ofstream* указатель, который он использует для std::cout? я знаю std::ofstream наследуется от std::ios, что позволяет изменять буфер потока с помощью rdbuf() метод, но, к сожалению, он появляется std::ofstream переопределяет rdbuf() метод, который делает следующий код не компилируемым:

gOsTrace = new std::ofstream();
gOsTrace->rdbuf(std::cout.rdbuf());

Есть ли другой способ перенаправить gOsTrace объект, указывающий на cout?


4


источник


Ответы:


rdbuf() метод конкретных классов потока IOStream скрыть тот, который указан в std::ios, Для того, чтобы найти перегрузку базового класса, вам понадобится явная квалификация:

gOsTrace->basic_ios<char>::rdbuf(std::cout.rdbuf());

6