1

我尝试使用 boost::log 库来实现日志记录。我将记录器声明为私有类成员,但是当我来到一个具有静态工厂方法的类时,没有计算出一个问题。错误消息是:在静态成员函数中无效使用成员 'MyObjectContainer::slg'。我想避免使用全局记录器,还有其他解决方案吗?

提前致谢。

4

1 回答 1

0

有几种解决方案。

1)您可以在静态函数中使用局部变量。像这样:

void MyClass::MyStaticmemberFunction()
{
    boost::log::sources::logger my_logger;
    BOOST_LOG(my_logger) << "log message.";
}

2)您可以将指向您的类对象的指针作为函数参数传输。在这种情况下,您还应该将“get function”添加到您的课程中。像这样:

// regular member function (not static) - "get function"
boost::log::sources::logger_mt MyClass::GetLogger()
{
    return m_member_logger;
}

void MyClass::MyStaticMemberFunction(MyClass *my_class_object)
{
    if (!my_class_object)
    {
        boost::log::sources::logger local_logger;
        BOOST_LOG(local_logger) << "MyStaticFunction:: invalid input data.";
        return;
    }
    BOOST_LOG(my_class_object->GetLogger()) << "log message.";
}

问候。

于 2014-06-09T09:48:01.110 回答