3

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

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

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

我很想听听非常量背后的原因,以及我的设计是否不适合 Boost::Log。

4

1 回答 1

4

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

使记录器成为可变类成员mutable SomeLoggerType my_logger;。然后您将能够在 const 成员中对其进行修改。这正是mutable本意。

至于您关于 mutable 是一种不良代码气味的评论, mutable 正是出于这种目的的逃生舱口。当您实际上没有修改对象的逻辑状态(并且在 c++11 中内部同步)时,可变的很好。可变使用的另一个非常好的例子是缓存。

于 2013-11-24T09:04:49.537 回答