CPP 建议更好的方法在没有开销/IO 调用的情况下进入静音状态
cpp suggest better ways to go to silence state without overhead/io calls
我们有可以在silence mode
和print 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<<
。
无论如何,我建议您使用日志记录库,因为这些问题已经解决了很多次。
- 如果 std::vector::clear() 不是静态的,如何在没有实例的情况下调用它?
- C++ - 如何在不调用其属性的情况下调用类?
- C++ 在不释放内存的情况下调用析构函数
- Python在不引用类名的情况下调用类函数
- 为什么在这种情况下调用非常量右值移动构造函数?
- 是否可以在没有显式专用化的情况下调用可变参数模板函数?
- 使用按引用调用时,不能在没有对象的情况下调用成员函数 const
- 您可以在不调用构造函数的情况下调用攻击器吗?
- 命名空间:不能在没有对象的情况下调用成员函数
- 哪些语言将在没有显式桥接的情况下调用C++
- 如何在不重新索引顶点的情况下调用"boost::remove_vertex"?
- C :在没有对象实例的情况下调用非静态成员函数
- 在不实例化的情况下调用不同派生类的虚拟方法
- C 如何在没有错误的情况下调用void函数
- 在MSVC上的数组初始化期间,destructor在不复制或移动构造方的情况下调用
- 在不指定实例化的情况下调用类模板的静态方法的方法
- 为什么INVOKE总是取消引用数据成员,而不是在可能的情况下调用
- 是否可以在不实例化派生类的情况下调用该类的虚拟函数
- 无法在没有对象的情况下调用成员函数(尽管我相信我确实初始化了它)
- 为什么在没有赋值运算符的情况下调用转换构造函数