Car*_*iro 3 c++ boost boost-log
BOOST_LOG_SEV我正在尝试使用严重性通道记录器,但我遇到了不是 const 方法的问题- 我想是因为 open_record() 和 push_record()
这基本上会迫使我将类中的所有方法设置为非 const,因为它们想要写入记录器。我真的负担不起这样做——所以目前我只能使用全球记录器。
在我当前的实现中,每个类都有一个以类名作为通道的记录器(在其构造函数中初始化),并且它随时发出日志消息BOOST_LOG_SEV(this->logger, level)
我很想听听非 constness 背后的原因,以及我的设计是否不适合 Boost::Log。
记录器不能是 const,因为它们会改变自己的状态。如果记录器是线程安全的并且不会更改对象的逻辑状态,那么它们是您应该使用 mutable 关键字的完美示例。
使记录器成为可变类成员mutable SomeLoggerType my_logger;。然后你就可以在 const 成员中修改它。这正是我们mutable的目的。
至于你对可变性是一种不好的代码味道的评论,可变性正是针对这种目的的逃生舱口。当您实际上没有修改对象的逻辑状态(并且在 c++11 中内部同步)时,可变就很好。可变使用的另一个完美的例子是缓存。
| 归档时间: |
|
| 查看次数: |
522 次 |
| 最近记录: |