汚いクイック:
std::ostream から派生し、<<
何もしない T の演算子を実装するクラスを定義します。
残念ながら、これは場合によっては機能しない可能性があります: の<<
演算子std::ostream
は多態的 (仮想ではない) ではないため、オーバーライドされたものは、ストリーム タイプがであり、 でない<<
場合にのみ呼び出されます。yourstream&
std::ostream&
より丁寧:
std::streambuf
バッファーを持たず、常に return 0でoverlflowをオーバーライドするクラスを使用して、派生します。
次にstd::ostream
、そのバッファに関連付けられた を作成し、getLog(); から返します。
これによりostream
、値をテキストに変換し、文字をバッファに送信するという仕事をすることができます。バッファは何もせずにそれらを食べます。
ライブラリには礼儀正しく、あまり効率的ではなくostream
、いずれにせよ呼び出される値からテキストへのルーチンです。
最も効率的な:
ロギングステートメントのコンパイルを条件付きにする: like
#ifdef DEBUG
#define DBG(x) x
#else
#define DBG(x)
#endif
// Your entire code here
#undef DBG
ロギングを次のように記述します
DBG(std::cout << logging_variables_and_text << std::endl);
DEBUG
が定義されていない場合、すべてDBG
が消去されます (CPU サイクルは消費されません)。