c++ - 为什么 Boost Log 记录器操作不是常量?

标签 c++ boost boost-log

我正在尝试使用严重性 channel 记录器,但我遇到了 BOOST_LOG_SEV 的问题不是 const 方法——我想是因为 open_record() 和 push_record()

这基本上会迫使我使我的类中的所有方法都不是 const,因为它们想写到它们的记录器中。我真的负担不起这样做——所以我目前仅限于全局记录器。

在我当前的实现中,每个类都有一个以类名作为 channel 的记录器(在它们的构造函数中初始化),并且它在任何时候使用 BOOST_LOG_SEV(this->logger, level) 发出日志消息

我很想听听非常数背后的原因,如果我的设计不是为 Boost::Log 而设计的。

最佳答案

记录器不能是常量,因为它们改变了它们自己的状态。如果记录器是线程安全的并且不会更改对象的逻辑状态,那么它们就是应该在何处使用可变关键字的完美示例。

使记录器可变类成员 mutable SomeLoggerType my_logger;。然后你就可以在 const 成员中修改它了。这正是 mutable 的用途。

关于您关于 mutable 是一种糟糕的代码味道的评论,mutable 正是用于这种目的的逃生舱口。当您实际上没有修改对象的逻辑状态(并且在 c++11 中内部同步)时,Mutable 很好。可变用法的另一个完美示例是缓存。

关于c++ - 为什么 Boost Log 记录器操作不是常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20172347/

相关文章:

c++ - 尝试在 Eclipse 中运行程序时出现 "Error opening terminal: unknown."

c++ - boost program_options自定义解析

logging - 什么是 Boost 日志 "debug output window"?

c++ - 在什么情况下我们需要知道一个类是否微不足道?

c++ - 在 C++ 中显示堆栈元素时无限循环

c++ - MinGW 5.1.0 似乎不再抑制警告

c++ - 在没有 Visual Studio 的 Windows 上安装 C++ Boost 库

c++ - 'reinterpret_cast' : cannot convert from 'overloaded-function' to 'intptr_t' with boost. dll

boost - Yocto 1.6 工具链中没有 libboost_log

c++ - Boost + Mingw-w64 + Boost 日志不起作用