1
我想創建一個C++ ostream對象,只有在條件成立的情況下才輸出任何東西以用於調試。最簡單的方法是什麼?我知道boost有一些簡單的類,但是我想知道是否有一種簡單的方法可以在沒有提升的情況下實現。文檔使得它看起來像繼承ostream :: sentry將使這成爲可能,但我找不到任何消息來源說這是你可以/應該做的事情。有條件輸出
我想創建一個C++ ostream對象,只有在條件成立的情況下才輸出任何東西以用於調試。最簡單的方法是什麼?我知道boost有一些簡單的類,但是我想知道是否有一種簡單的方法可以在沒有提升的情況下實現。文檔使得它看起來像繼承ostream :: sentry將使這成爲可能,但我找不到任何消息來源說這是你可以/應該做的事情。有條件輸出
不要繼承,它更容易使用的包裝:
class MaybeOstream
{
public:
MaybeOstream(std::ostream& stream_) : stream(stream_), bOutput(true) {}
void enable(bool bEnable) { bOutput = bEnable; }
template<typename T>
MaybeOstream& operator<< (T x)
{
if(bOutput)
stream << x;
return *this;
}
// Add other wrappers around ostream: operator void*, good(), fail(),
// eof(), etc., which just call through to the ostream
private:
std::ostream& stream;
bool bOutput;
}
就以過濾的streambuf來看看this paper。
這將需要測試條件(如果條件可能在任何時候都會改變)以及每次使用流時調用「enable」。在這種情況下,可以在每個輸出之前使用一個「if」。 – JohnPS
太棒了,謝謝!我不知道你可以用模板做到這一點。這是某種類型推斷嗎?我應該搜索哪些條款以瞭解更多信息? (並指出一個小錯別字可能會發現這個答案有用:stream(stream)應該是stream(stream_)。如果我在分割段時撓頭了)。日誌記錄類型的情況下,條件將是全局狀態。打印的代碼並不關心條件是否爲假,因爲它是在別處設置的。 –
哪個助學班幹這個工作? – suresh