我想创建一个C ++ ostream对象,只有在条件成立时才输出任何东西,用于调试。最简单的方法是什么?我知道boost有类可以让这很容易,但是我想知道是否有一种简单的方法可以在没有提升的情况下完成它。文档使得看起来像子类化ostream :: sentry会使这成为可能,但我找不到任何来源说这是你可以/应该做的事情。
答案 0 :(得分:6)
不要子类化,使用包装器更容易:
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;
}
答案 1 :(得分:0)
在过滤后的streambufs上查看this paper。