我正在尝试为我自己做一个简单的日志库。我知道曾经存在过几个,但我还没有找到任何适合我的应用程序的仅 header 、小型且非常“C++”的日志库。
目前我有以下语法:
logger << debug << "A debug message" << end; //debug and end is my custom manipulators
我已经实现了所有必要的运算符 << 并且它工作得很好,特别是当它与 std::ostream 向后兼容时。但我想知道,如果不应该记录某些消息(在示例中调试后),为什么要停止评估任何内容,只是为了提高效率?让严重性操纵器“消失”后的所有内容?
现在我有以下简短的代码:
template <typename Type>
Logger & Logger::operator<<(const Type & message)
{
if(this->get_message_level() <= this->get_severity())
{
BOOST_FOREACH(std::ostream* stream, this->_sinks)
{
*stream << message;
}
}
return *this;
}
Logger & Logger::operator<< (Logger & (*pf)(Logger&))
{
return pf(*this);
}
Logger & debug(Logger& logger)
{
logger.lock();
logger.set_severity(7);
//...
return logger;
}
Logger & end(Logger& logger)
{
logger << std::endl;
logger.unlock();
return logger;
}
提前致谢。
最佳答案
你可以做一些简单的事情
extern "C" bool want_log;
#define LOG(Arg) do { if (want_log) \
cout << __FILE__ << ":" << __LINE__ ": " << Arg << endl; } while(0)
并将其用作 LOG("x=" << x)
关于c++ - 停止计算运算符<<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8602546/