Piszę logger. Jeśli wyłączone, jest to kod definiujący makro LOG:Null stream, czy muszę dołączyć ostream?
#ifdef NO_LOG
#include <ostream>
struct nullstream : std::ostream {
nullstream() : std::ios(0), std::ostream(0) {}
};
static nullstream logstream;
#define LOG if(0) logstream
#endif
LOG << "Log message " << 123 << std::endl;
Działa poprawnie. Kompilator powinien całkowicie usunąć kod związany z makrem LOG.
Chciałbym jednak uniknąć włączenia ostream i zdefiniować obiekt logstream jako coś naprawdę "lekkiego", prawdopodobnie zerowego.
Dziękujemy!
Działa, ale czy można uniknąć włączenia iostream? Np. Czy możliwe jest użycie czegoś innego zamiast std :: endl? –
@Pietro: to jest potrzebne tylko dla przykładu, dla 'std :: endl'. 'nullstream' samo nie potrzebuje tego, tylko' '(deklaracje forward typu' '). –
@Pietro Często możliwe jest użycie '\ n' zamiast std :: endl. – UncleBens