Я пытаюсь написать класс журнала с практикой threadsafe в C++. Теперь дело в том, что я хочу сделать вызов для каждой строки журнала очень простым. Я могу пойти со статическим способом класса, как показано ниже:C++ singleton класс экземпляр доступ ко всему приложению
//Calling this in some GUI initialization point of application
CLogger::InitLogger("LogFile.log");
//Calling below from any class just adding the header to the cpp
CLogger::Log("Some informational text goes here");
Теперь это не следует ООП так хотелось пойти с классом одноэлементных.
//Singleton log class
class CLogWrite
{
public:
static CLogWrite* GetInstance();
private:
static CLogWrite *pInstance;
void Log();
};
CLogWrite* CLogWrite::GetInstance()
{
if(pInstance != NULL)
{
pInstance = new CLogWrite;
}
return pInstance;
}
void CLogWrite::Log()
{
//threadSafe lock
//write 'logText' to file here
//threadSafe unlock
}
Теперь дело в том, если я пишу выше класса и вызвать CLogWriter :: GetInstance() внутри моего GUI функции класса инициализации, как показано ниже:
//single logger instance for my app
CLogWriter *mLogInstance;
mLogInstance = CLogWriter::GetInstance()
Мне нужно передать переменную «mLogInstance» в каждый класс внутри моего проекта, откуда я хочу написать журнал. Но я не хочу этого делать.
Что было бы лучше всего подходит?
Почему вы не можете объявить глобальную переменную, потому что в нашем приложении мы использовали глобальную переменную –
«переменная для каждого класса». что это значит. –
Зачем изобретать колесо? Вы можете использовать существующую библиотеку ведения журнала, такую как [Boost.log] (http://www.boost.org/libs/log/doc/html/index.html) или [glog] (https://github.com/google/GLog). –