このような構造が散りばめられたコードがいくつかあります
if(debug) {
Output << "f1: " << f1() << "\n";
}
今私がやりたいことは、Debugこのように書くことができるストリームクラスを書くことです
Debug << "f1: " << f1() << "\n";
グローバル フラグが設定されている場合、出力が生成されますが、そうでない場合は生成されません。
これは、出力を飲み込む先のDebugストリームを return にすることで、非常に簡単に実行できます。/dev/null問題は、f1()依然として評価される (そして、さらにコストがかかる可能性のあるテキスト表現に「レンダリング」される) ことであり、これはパフォーマンスにとって非常に悪い可能性があります。
ここで私の質問:「評価」のスキップを可能にするトリックはありますか?
"f1: " << f1() << "\n"
出力を行わないと決定した場合は完全Debugに? f() && g()C++ がwhere g()is not evaluate if f()isに対して行うショート サーキットと同様ですfalse(出力演算子として使用するストリーム クラスを作成することを真剣に検討しました&&が、読んだ内容からは、オーバーロードされたショート サーキットは実行されませんoperator&&) 。