我正在尝试使用严重性通道记录器,但我遇到的问题是BOOST_LOG_SEV
不是const方法 - 我正在考虑因为open_record()和push_record()
这基本上会迫使我让我的类中的所有方法都不是const,因为他们想写出他们的记录器。我真的不能这么做 - 所以我目前只限于全球记录器。
在我当前的实现中,每个类都有一个记录器,其中类名作为通道(在其构造函数中初始化),并且它在BOOST_LOG_SEV(this->logger, level)
我很想听听非常规背后的原因,如果我的设计不适合Boost :: Log。
答案 0 :(得分:4)
记录器不能是const,因为它们会改变自己的状态。如果记录器是线程安全的并且不改变对象的逻辑状态,那么它们就是你应该使用mutable关键字的完美示例。
使loggers可变类成员mutable SomeLoggerType my_logger;
。然后你就可以在const成员中修改它了。这正是mutable
的意思。
至于你对可变性是一种糟糕的代码气味的评论,可变的是一种逃避舱口,正是出于这种目的。当你实际上没有修改对象的逻辑状态时(和c ++ 11内部同步),Mutable很好。可变用法的另一个非常好的例子是缓存。