我正在寻找一个日志类,其中包含Info,Error等成员,可以配置输出到控制台,文件或无处.
为了提高效率,我希望避免格式化将要丢弃的消息的开销(即,不以详细模式运行时的信息消息).如果我实现一个输出到无处的自定义std :: streambuf,我想std :: ostream层仍将执行所有格式化.任何人都可以建议一种方法来拥有一个真正的"空"std :: ostream,它可以避免在传递给它的参数上做任何工作<<吗?
谢谢.
考虑以下:
std::ostream out(nullptr);
Run Code Online (Sandbox Code Playgroud)
这是合法的,定义明确吗?
如果我现在这样做:
out << "hello world\n";
Run Code Online (Sandbox Code Playgroud)
这是合法的,定义明确吗?如果是这样的话,大概这是一种无操作?
这是一个示例C++代码
ostream& log = cout;
ostream& getLog() { return log; }
// somewhere in code
getLog() << "Message";
Run Code Online (Sandbox Code Playgroud)
执行此代码时,将打印"消息".
问:丢弃这些消息的最简单方法是什么(不打印,不保存)?getLog仍然必须由客户端使用,但可能会返回一些吞下所有消息的模拟输出流...