Гибкий класс логгера с использованием стандартных потоков в C ++

Я хотел бы создать гибкий класс регистратора. Я хочу, чтобы он мог выводить данные в файл или на стандартный вывод. Также я хочу использовать потоки. Класс должен выглядеть примерно так:

class Logger
{
private:
   std::ostream m_out; // or ofstream, iostream? i don't know
public:

   void useFile( std::string fname);
   void useStdOut();

   void log( symbol_id si, int val );
   void log( symbol_id si, std::string str );
   //etc..
};

symbol_id является перечислением и определяет форматирование. То, чего я хочу достичь, - это возможность легко переключаться со стандартного вывода на файл и наоборот (это цельuse* методы). Желательно просто используяm_out и просто писатьm_out << "something"; без каких-либо проверок, хочу ли я записать в файл или стандартный вывод.

Я знаю, что есть много способов, как обойти это (с помощьюif's чтобы проверить, хочу ли я записать в файл или стандартный вывод, «путь C» (используяFILE* а такжеfprintf)) и так далее, но я уверен, что должен быть способ добиться этого с помощью потоков C ++. Но я не могу найти способ, как это сделать. Может кто-нибудь помочь мне, пожалуйста?

Ответы на вопрос(4)

Ваш ответ на вопрос