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 и имени файла.

Спасибо.
Re: Singleton configuration
От: Anton V. Kolotaev  
Дата: 01.03.03 11:15
Оценка:
Здравствуйте, Tuo_Bellas, Вы писали:

TB>

TB>typedef Logger<"mylog.txt"> MyLogger;

TB>


Во-первых, компилятор тебе не даст параметризовать шаблон строковым литералом.

Во-вторых, ничего страшного в том, что имя файла лога прописывается в тексте программы, я не вижу. Главное, чтобы оно упоминалось в единственном месте — тогда проблем с его изменением не будет. В принципе, можно определять имя файла лога при запуске программы (и при создании объекта синглтона), но такой подход мне кажется более подверженным ошибкам, к которому не стоит прибегать без необходимости.

В-третьих, я надеюсь, ты уже читал эту
Автор(ы): Дмитрий Федоров
Дата: 14.11.2002
статью?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.