我有一个使用 progress_display
来显示加载条的函数。我希望能够禁用输出以进行测试。加载栏打印它被初始化的第二个,如果我在 if 语句中初始化它,我会从另一个 if 语句中调用 ++loading_bar;
得到一个错误。
我想知道我是否可以通过使用我自己的什么都不做的流初始化它来禁用它,但我不知道我将如何做到这一点。
#include <boost/progress.hpp>
int myfuntion(bool silent)
{
int computations = 100;
boost::progress_display loading_bar(computations);
++loading_bar;
}
最佳答案
您必须在构造函数中传递一个派生自 std::ostream
的对象,并且 progress_display
存储一个引用,因此之后无法更改它。
正如您所说,您可以创建自己的对象来控制输出,但它必须符合:
- 它必须派生自
std::ostream
。 - 它的持续时间必须与
progress_display
的持续时间相同。
您可能会找到更多信息here关于 std::ostream
的派生。基于链接,您可以定义以下 struct
;
struct Output : std::ostream, std::streambuf
{
Output(bool enabled) : std::ostream(this), m_enabled(enabled) {}
int overflow(int c) {
if(m_enabled) std::cout.put(c);
return 0;
}
bool m_enabled;
};
现在,如果您将 progress_display
声明为:
struct
可以启用/禁用其构造函数的输出:
// Visible progress
Output out_enabled(true);
boost::progress_display loading_bar_visible(computations, out_enabled);
// Invisible progress
Output out_disabled(false);
boost::progress_display loading_bar_invisible(computations, out_disabled);
关于c++ - 禁用 boost 的 `progress_display` 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44027707/