2014-02-25 11 views
1

나는 boost :: log 라이브러리를 사용하여 로깅을 구현하려고한다. 로거를 private 클래스 멤버로 선언했지만 static factory 메서드를 사용하여 클래스에 올 때 문제가 발생했습니다. 오류 메시지 : 정적 멤버 함수에서 'MyObjectContainer :: slg'멤버를 잘못 사용했습니다. 글로벌 로거를 피하려면 다른 해결책이 있습니까?Boost :: static with static factory methods

미리 감사드립니다.

답변

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."; 
} 

감사합니다.