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