gpt4 book ai didi

c++ - cpp 建议在没有开销/io 调用的情况下进入静音状态的更好方法

转载 作者:行者123 更新时间:2023-11-30 04:27:26 25 4
gpt4 key购买 nike

我们有可以在 silence mode 运行的守护进程和 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 (something = some function that have operator << and without overhard (does not know how to realise, seems need to define our own function with defined <<` that do nothing )

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

最佳答案

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

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

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

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

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

关于c++ - cpp 建议在没有开销/io 调用的情况下进入静音状态的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10959573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com