我正在寻找一个std::ostream类似的实现/dev/null.它会忽略流向它的任何内容.标准库或Boost中是否存在这样的事情?或者我必须自己动手?
我正在寻找一个日志类,其中包含Info,Error等成员,可以配置输出到控制台,文件或无处.
为了提高效率,我希望避免格式化将要丢弃的消息的开销(即,不以详细模式运行时的信息消息).如果我实现一个输出到无处的自定义std :: streambuf,我想std :: ostream层仍将执行所有格式化.任何人都可以建议一种方法来拥有一个真正的"空"std :: ostream,它可以避免在传递给它的参数上做任何工作<<吗?
谢谢.
我想将数据发送到任何地方,我的意思是我不想在控制台或文件中打印数据,但我需要一些std::ostream对象.怎么做?
我有一些代码,像这样的构造
if(debug) {
Output << "f1: " << f1() << "\n";
}
Run Code Online (Sandbox Code Playgroud)
现在我想要做的是编写一个流类Debug,我可以像这样编写它
Debug << "f1: " << f1() << "\n";
Run Code Online (Sandbox Code Playgroud)
如果设置了某个全局标志,那么这将生成输出,否则不会.
现在:通过Debug返回一个/dev/null吞噬输出的流可以很容易地做到这一点.问题是f1()仍然会被评估(并"渲染"成文本表示,这可能会更加昂贵),这可能对性能非常不利.
现在我的问题是:是否有任何技巧可以跳过"评估"
"f1: " << f1() << "\n"
Run Code Online (Sandbox Code Playgroud)
完全如果Debug决定不应该输出?到短路是C++做类似的f() && g()地方g(),如果不计算f()为false(我认真考虑编写一个使用流类&&作为输出操作,但是从我读短路没有重载完成operator&&)
我想声明一个std::out默认写入的函数,但也可以选择启用写入另一个输出流(如果有的话).例如:
print_function(std::string & str,
std::ostream & out = std::cout,
std::ostream & other = nullptr) // <-- how to make it optional???
{
out << str;
if (other == something) // if optional 'other' argument is provided
{
other << str;
}
}
Run Code Online (Sandbox Code Playgroud)
设置nullprt显然不起作用,但如何做到这一点?