我需要一个用于调试目的的记录器,并且我正在使用 Boost.Log(1.54.0,在 boost.org 主页上有一个补丁)。
一切都很好,我创建了一些这样的宏:
#define LOG_MESSAGE( lvl ) BOOST_LOG_TRIVIAL( lvl )
现在是 LOG_MESSAGE( lvl ) 仅在调试模式下在 BOOST_LOG_TRIVIAL( lvl ) 中扩展并在发布时忽略的一种方式吗?
例如:
LOG_MESSAGE( critical ) << "If I read this message we're in debug mode"
编辑 我的第一次尝试是创建一个空流......我认为在发布模式下编译器会优化它......
#if !defined( NDEBUG )
#include <boost/log/trivial.hpp>
#define LOG_MESSAGE( lvl ) BOOST_LOG_TRIVIAL( lvl )
#else
#if defined( __GNUC__ )
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-value"
#endif
#include <iosfwd>
struct nullstream : public std::ostream {
nullstream() : std::ios(0), std::ostream(0) {}
};
static nullstream g_nullstream;
#define LOG_MESSAGE( lvl ) g_nullstream
#if defined( __GNUC__ )
#pragma GCC diagnostic pop
#endif
#endif