У меня есть класс C ++, в котором я хотел бы хранить поток, используемый для ведения журнала.
Поток должен быть в состоянии быть установлен (и, возможно, сброшен) после создания объекта.
Должна быть возможность установить поток как std::cout
, или как файловый поток для записи в файл, или как строковый поток, который не делает ничего, кроме игнорирования данных (своего рода /dev/null
).В любом случае, это должен быть объект типа ostream
, который создатель объекта может сбросить в любой момент.Сам класс не обращает внимания на конкретный тип потока.
Я мог бы сделать это с помощью указателя на ostream, но тогда синтаксис становится немного раздражающим, так как приходится использовать оператор deref:
(*m_log) << "message";
, а не
m_log << "message";
Но я не могу использовать ссылки, поскольку объект потока должен быть сброшен после инициализации объекта.
Есть ли элегантный способдобиться этого, т. е. избегать использования указателей, но все же иметь возможность сброса после построения?