C++ stream as a member variable

У меня есть класс C++, в котором я хотел бы хранить поток, используемый для протоколирования.

Поток должен иметь возможность быть установленным (и, возможно, сброшенным) после создания объекта.

Должна быть возможность установить поток как std::cout, или как файловый поток для записи в файл, или как строковый поток, который не делает ничего, кроме игнорирования данных (что-то вроде /dev/null). В любом случае, это должен быть объект типа ostream, который создатель объекта может сбросить в любое время. Сам класс не обращает внимания на конкретный тип потока.

Я мог бы сделать это с помощью указателя на ostream, но тогда синтаксис становится немного раздражающим, приходится использовать оператор deref:

(*m_log) << "message";

а не

m_log << "message";

Но я не могу использовать ссылки, так как объект потока должен быть возможно сброшен после инициализации объекта.

Есть ли элегантный способ добиться этого, т.е. избежать использования указателей, но иметь возможность сброса после конструирования?

10
задан Tamás 9 December 2011 в 13:48
поделиться