Vorrei creare una classe di logger flessibile. Voglio che sia in grado di emettere i dati su un file o sullo standard output. Inoltre, voglio usare i flussi. La classe dovrebbe essere simile:Classe di logger flessibile che utilizza flussi standard in 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..
};
Il symbol_id
è un enum e definisce la formattazione. Quello che voglio ottenere è poter passare facilmente da un output standart a un file e viceversa (questo è lo scopo dei metodi use*
). Preferibilmente usando semplicemente m_out
e semplicemente scrivendo m_out << "something";
senza alcun controllo se voglio scrivere su un file o stdout.
So che ci sono molti modi per aggirare questo (usando if's
per verificare se voglio scrivere su un file o stdout, la "via C" (usando FILE*
e fprintf
)) e così via, ma Sono sicuro che ci deve essere un modo per ottenere questo con gli stream C++ in modo piacevole. Ma non riesco a trovare il modo in cui farlo. Qualcuno mi puó aiutare per piacere?
Grazie, buona soluzione! – PeterK