我想要每个类的日志源,例如docs
中的basic_logger示例这样可行,但是当从const成员函数中记录某些内容时,我收到编译器错误抱怨const:
#include "boost/log/sources/channel_logger.hpp"
#include "boost/log/common.hpp"
#include "boost/log/utility/init/to_console.hpp"
#include "boost/log/utility/init/common_attributes.hpp"
class Test
{
public:
// this works, not a const function
void test1()
{
BOOST_LOG(m_logger) << "Test 1";
}
// this will not compile, const function
void test2() const
{
BOOST_LOG(m_logger) << "Test 2";
}
private:
boost::log::sources::channel_logger<std::string> m_logger;
};
int main()
{
boost::log::add_common_attributes();
boost::log::init_log_to_console();
Test t;
t.test1();
t.test2();
return 1;
}
在此示例中,Test::test2
给出了编译错误,因为它的const和m_logger
不是。 Test::test1
工作正常。
如何在没有const_cast
,mutable
等的情况下以干净的方式解决这个问题。
答案 0 :(得分:3)
如果日志存储在课程中,那么您当然无法在const
上下文中修改它。
我意识到你要求别的东西,但老实说我认为mutable
是适当的解决方案。这正是mutable
存在的用例。
答案 1 :(得分:1)
你需要将可变记录器移到你的类之外然后一切都会正常工作。或者你使用不同的东西给你一个不可变的记录器对象。