Здравствуйте, All!
Как быть с синглетоном, если его необходимо настроить перед началом работы?
Хочу указать имя файла, в который будет писать Logger. Причем до начала его использования.
Не хочу для этого менять сам класс (т.е. имя не должно быть в него "зашито").
Пока в голову приходит лишь такое (бредовое?) решение (ни одну строчку кода отсюда не еще
компилировал):
template <class FileName>
class Logger
{
public:
static Logger * Instance()
{
if(m_pLogger == NULL)
{
m_pLogger = new Logger(FileName);
}
return m_pLogger;
}
/* ... */
private:
static Logger * m_pLogger;
Logger(const char * fileName)
{
/* ... */
}
~Logger()
{
if(m_pLogger != NULL)
{
delete m_pLogger;
m_pLogger = NULL;
}
}
// Disable copy constructor and assigment operator.
Logger(const Logger & logger);
Logger & operator=(const Logger & logger);
};
Logger * Logger::m_pLogger = NULL;
/* ... */
typedef Logger<"mylog.txt"> MyLogger;
Однако, пока не ясны все "побочные эффекты" от такой "архитектуры". По крайней мере, не
очень хочется иметь имя файла зашитым в исходном коде как сделано здесь.
Что посоветуете? Особенно интересует общее решение для подобного рода случаев, не только
для класса Logger и имени файла.
Спасибо.