我需要一個記錄器用於調試目的,我使用的是Boost.Log(1.54.0在boost.org主頁中有一個補丁)。只在調試時啓用Boost.Log
這是所有罰款我已經創造了一些宏是這樣的:
#define LOG_MESSAGE(lvl) BOOST_LOG_TRIVIAL(lvl)
現在是一種方式,LOG_MESSAGE(LVL)在BOOST_LOG_TRIVIAL(LVL)是expaneded僅在調試模式和發佈忽略?
例如:
LOG_MESSAGE(critical) << "If I read this message we're in debug mode"
編輯 我第一次嘗試是創建一個nullstream ...我認爲,在釋放模式編譯器優化它...
#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
這種方法幾乎沒有好處。它可能會阻止NullLogger方法被調用,但看看它們:它們是在類中定義的,所以是'inline'。他們也是空的。調用它們只是理論上的,實際上優化器會刪除每個'NullLogger'的蹤跡。 – MSalters