CPP 建议更好的方法在没有开销/IO 调用的情况下进入静音状态



我们有可以在silence modeprint mode上运行的守护进程(打印到std::cout)。如何在没有开销和 io 调用的情况下使其silence。建议更多更好的方法!或者写什么方法更好!(优点/缺点)

例如:

1 方式:

代码std::cout << "blah-blah-blah: " << var << std::endl;的简单位置 何时需要沉默close(STDOUT_FILENO)或重写 cout 以dev/null(如何?

2 路

使用global bool FLAG_SILENCE并在每次通话前检查它:if (!FLAG_SILENCE) std::cout << "blah-blah-blah: " << var << std::endl;

3 路预定义的宏#define SILENTCOUT std::cout何时需要静音#define SILENTCOUT SOMETHING(某些东西=某些具有运算符<<并且没有不执行任何操作的过硬(does not know how to realise, seems need to define our own function with defined <<的功能)

4 路使用SILENTCOUT( "mess" )预定义的宏#define SILENTCOUT(x) std::cout << x << std::endl -- 危险,非常丑陋

一个常见的解决方案是提供包含if和实际打印的宏:

#define LOG( msg )                 
    if ( !log_enabled ) {} else    
        std::cout << msg;

尽管通常宏稍微复杂一些(例如,与其测试log_enabled采用日志级别,不如将其与预定义的级别进行比较并相应地记录)。

某些库使用宏选项,该宏返回实现operator<<的记录器对象,并根据配置提供适当的记录器或仅忽略参数的无操作接收器。这可能性能稍差,因为这至少需要函数调用operator<<

无论如何,我建议您使用日志记录库,因为这些问题已经解决了很多次。

最新更新