en utilisant par classe boost :: log :: sources :: logger à partir de la fonction membre const

StackOverflow https://stackoverflow.com/questions/5059471

  •  15-11-2019
  •  | 
  •  

Question

Je veux une source de journal par classe comme l'exemple basic_logger du documents

Cela fonctionne mais j'obtiens une erreur du compilateur se plaignant de la constance lors de la journalisation de quelque chose à partir d'une fonction membre const comme ceci :

#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;
}

Dans cet exemple Test::test2 donne une erreur de compilation car sa const et m_logger n'est pas. Test::test1 fonctionne bien.

Comment résoudre ce problème de manière propre sans const_cast, mutable etc.

Était-ce utile?

La solution

Si le journal est stocké dans la classe, vous ne pouvez bien sûr pas le modifier dans un const contexte.

Je réalise que tu as demandé autre chose, mais je pense honnêtement que mutable est la solution appropriée ici.C'est exactement le cas d'utilisation, c'est pourquoi mutable existe.

Autres conseils

Vous devez déplacer l'enregistreur mutable en dehors de votre classe pour que tout fonctionne correctement.Ou vous utilisez quelque chose de différent qui vous donne un objet enregistreur immuable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top