このような構造が散りばめられたコードがいくつかあります
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&&
) 。