Singleton configuration
От: Tuo_Bellas Россия  
Дата: 01.03.03 10:58
Оценка:
Здравствуйте, 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 и имени файла.

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.