Estoy escribiendo un registrador. Si está deshabilitado, este es el código que define la macro LOG:Transmisión nula, ¿tengo que incluir 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;
Funciona correctamente. El compilador debería eliminar por completo el código relacionado con la macro LOG.
Sin embargo, me gustaría evitar la inclusión de ostream y definir el objeto logstream como algo realmente "ligero", posiblemente nulo.
¡Gracias!
Funciona, pero ¿es posible evitar la inclusión de iostream? Por ejemplo, ¿es posible usar algo más en lugar de std :: endl? –
@Pietro: eso solo es necesario para el ejemplo, para 'std :: endl'. 'nullstream' en sí mismo no necesita eso, solo' '(declaraciones avanzadas de los tipos' '). –
@Pietro A menudo es posible usar '\ n' en lugar de std :: endl. – UncleBens