有条件输出
问题描述:
我想创建一个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;
}
这将需要测试条件(如果条件可能在任何时候都会改变)以及每次使用流时调用“enable”。在这种情况下,可以在每个输出之前使用一个“if”。 – JohnPS
太棒了,谢谢!我不知道你可以用模板做到这一点。这是某种类型推断吗?我应该搜索哪些条款以了解更多信息? (并指出一个小错别字可能会发现这个答案有用:stream(stream)应该是stream(stream_)。如果我在分割段时挠头了)。日志记录类型的情况下,条件将是全局状态。打印的代码并不关心条件是否为假,因为它是在别处设置的。 –
哪个助学班干这个工作? – suresh