我正在尝试使用严重性 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/