2

我想要每个类的日志源,例如文档中的 basic_logger示例

这可行,但是当我从 const 成员函数记录某些内容时,我得到一个编译器错误,抱怨 constness,如下所示:

#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

4

2 回答 2

3

如果日志存储在类中,那么您当然不能在const上下文中修改它。

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

于 2011-02-20T19:39:55.430 回答
1

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

于 2011-02-20T19:41:25.757 回答