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