我正在写一个记录器。如果禁用,这是定义LOG宏的代码:空流,我必须包括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;
它工作正常。编译器应该完全删除与LOG宏有关的代码。
但是我想避免包含ostream并将logstream对象定义为真的“轻”,可能为null。
谢谢!
它的工作,但是有可能避免包含iostream?例如,是否可以使用别的东西而不是std :: endl? –
@Pietro:对于'std :: endl'来说,只需要这个例子。 'nullstream'本身并不需要,只是''(类型的前向声明)。 –
@Pietro通常可以使用'\ n'而不是std :: endl。 – UncleBens