【发布时间】:2017-10-05 20:10:35
【问题描述】:
我想编写一个程序,让用户通过设置程序显示进度或禁用它来控制包的日志记录。
我知道std::cout 是std::ostream,区别在于std::cout 将结果重定向到标准输出。
我希望我的班级有一个 std::ostream 成员,我可以记录所有内容。然后如果用户启用显示,该成员将附加到std::cout并显示结果,否则不会。
我的想法是这样的:
class log {
private:
std::ostream display;
public:
void func();
void show_display();
}
void log::func(){
display << "called by func";
}
void log::show_display(){
// redirect display to standard output
}
有没有类似上面的方法可以做到这一点?如果没有,我怎样才能得到类似的结果?
谢谢。
【问题讨论】:
-
"不同之处在于 std::cout 将结果直接显示在屏幕上。" - 不,它写入标准输出 - 你可以从你的 shell 重定向它。
-
@NeilButterworth 这绝对正确,我很抱歉这个错误。我会编辑
-
您可以将其用于忽略输出的流:stackoverflow.com/a/11826666/951890
-
@VaughnCato 感谢您的建议,我希望可以随时控制将流重定向到标准输出。
-
您可以让
display()成为返回std::ostream&的函数,该函数可以是无操作流,也可以是std::cout,具体取决于是否启用了日志记录。