Гибкий класс логгера с использованием стандартных потоков в 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 ++. Но я не могу найти способ, как это сделать. Может кто-нибудь помочь мне, пожалуйста?