デバッグ目的でロガーが必要で、Boost.Log (boost.org ホームページにパッチが適用された 1.54.0) を使用しています。
次のようなマクロを作成しました。
#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