1

我们有可以在silence modeand上运行的守护进程print mode(打印到 std::cout)。如何在silence没有开销和 io 调用的情况下实现它。建议更多更好的方法来做到这一点!或者写什么方法比较好!(优点/缺点)

例如:

1方式:

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

2种方法

global bool FLAG_SILENCE在每次 cout 调用之前使用并检查它: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 路 预定义宏#define SILENTCOUT(x) std::cout << x << std::endl使用SILENTCOUT( "mess" )——危险,非常丑陋

4

1 回答 1

2

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

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

虽然通常宏有点复杂(例如,不是测试log_enabled采用日志级别,而是将其与预定义的级别进行比较并相应地记录)。

一些库使用宏的选项,该选项返回一个实现的记录器对象,operator<<并且根据配置将提供适当的记录器或只忽略参数的无操作接收器。这可能会稍微降低性能,因为这至少需要对operator<<.

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

于 2012-06-09T12:00:17.337 回答