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 に答える