从const成员函数使用每个类boost :: log :: sources :: logger

时间:2011-02-20 19:35:54

标签: c++ boost boost-logging

我想要每个类的日志源,例如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_castmutable等的情况下以干净的方式解决这个问题。

2 个答案:

答案 0 :(得分:3)

如果日志存储在课程中,那么您当然无法在const上下文中修改它。

我意识到你要求别的东西,但老实说我认为mutable是适当的解决方案。这正是mutable存在的用例。

答案 1 :(得分:1)

你需要将可变记录器移到你的类之外然后一切都会正常工作。或者你使用不同的东西给你一个不可变的记录器对象。