Имеется Singleton — например CLogger.Методы его вызываются достаточно часто во всех класах.
Каждый раз получать ссылку на экземпляр вызывая CLogger::Instance() не удобно.
Как поступить в этой ситуации?
Пока на ум пришло 2 решения
— глобальные макросы или процедуры, для основных методов CLogger (типа DEBUG, INFO, ERROR ... )
— в каждом классе хранить ссылку на CLogger (инициализируюмую в конструкторе)
Здравствуйте, artemox, Вы писали:
A>Имеется Singleton — например CLogger.Методы его вызываются достаточно часто во всех класах. A>Каждый раз получать ссылку на экземпляр вызывая CLogger::Instance() не удобно. A>Как поступить в этой ситуации? A>Пока на ум пришло 2 решения A> — глобальные макросы или процедуры, для основных методов CLogger (типа DEBUG, INFO, ERROR ... ) A> — в каждом классе хранить ссылку на CLogger (инициализируюмую в конструкторе)
Здравствуйте, artemox, Вы писали:
A>Имеется Singleton — например CLogger.Методы его вызываются достаточно часто во всех класах. A>Каждый раз получать ссылку на экземпляр вызывая CLogger::Instance() не удобно. A>Как поступить в этой ситуации? A>Пока на ум пришло 2 решения A> — глобальные макросы или процедуры, для основных методов CLogger (типа DEBUG, INFO, ERROR ... ) A> — в каждом классе хранить ссылку на CLogger (инициализируюмую в конструкторе)
Спасибо. Твой второй вариант пока самое короткое и неприхотливое решение.
По ходу еще один вопрос возник — так может когда нибудь пригодится
Как быть если синглетон должени принимать параметр в конструкторе?
artemox -> "Re[2]: Singleton с параметрами"
a> Спасибо. Твой второй вариант пока самое короткое и неприхотливое a> решение. a> По ходу еще один вопрос возник — так может когда нибудь пригодится a> Как быть если синглетон должени принимать параметр в конструкторе?
главное чтобы инстанс один и тот же возвращал, а уж сколько и какие
параметры — пофиг
Здравствуйте, hrg, Вы писали:
hrg>главное чтобы инстанс один и тот же возвращал, а уж сколько и какие hrg>параметры — пофиг
Это ясно Но как быть если сначала был вызван S::Instance(1) а позже S::Instance(2).
По идее надо генерить exception. Да и вобще, имхо лучше избегать таких синглетонов.
Здравствуйте, Ведмедь, Вы писали:
В>А чем не нравятся статические методы?
В>CLogger::Write()
В принципе если в статический класс "встроить" синглетон, или для синглетона сделать оббертку из статического класса , то вполне приемлимо. Честно говоря несмотря на то что кода писать больше, склонюсь видимо именно к этому решению. Если можно обойтись без макросов, то стараюсь сделать именно так. Что за нелюбовь к #define
Здравствуйте, artemox, Вы писали:
A>Здравствуйте, Ведмедь, Вы писали:
В>>А чем не нравятся статические методы?
В>>CLogger::Write()
A>В принципе если в статический класс "встроить" синглетон, или для синглетона сделать оббертку из статического класса , то вполне приемлимо. Честно говоря несмотря на то что кода писать больше, склонюсь видимо именно к этому решению. Если можно обойтись без макросов, то стараюсь сделать именно так. Что за нелюбовь к #define
Кроме того универсальней, если это будет MC++, то результаты можно будет применять в проектах на C#, к примеру.