me gustaría crear una clase de registrador flexible. Quiero que pueda enviar datos a un archivo o a una salida estándar. Además, quiero usar transmisiones. La clase debe ser algo como:clase de registrador flexible que utiliza corrientes estándar en 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..
};
la symbol_id
es una enumeración y define el formato. Lo que quiero lograr es poder cambiar fácilmente de la salida estándar a un archivo y viceversa (este es el propósito de los métodos use*
). Preferentemente, simplemente usando m_out
y simplemente escribiendo m_out << "something";
sin ningún control, si quiero escribir en un archivo o stdout.
Sé que hay muchas maneras de cómo evitar esto (usando if's
para probar si quiero escribir en un archivo o la salida estándar, el "camino C" (usando FILE*
y fprintf
)) y así sucesivamente, pero Estoy seguro de que debe haber una forma de lograr esto con las transmisiones en C++ de una manera agradable. Pero parece que no puedo encontrar la manera de hacerlo. ¿Puede alguien ayudarme por favor?
¡Gracias, buena solución! – PeterK