Как использовать много объектов класса, как в случае синглтона?

Недавно я разработал класс logger для C++/Qt, который был реализован как Singleton, так как у каждого приложения, использующего этот класс, должен был быть только один экземпляр, и, что наиболее важно, я не хотел копировать указатели повсюду и не загрязнять мой код много extern,

Но возникла проблема, когда я начал использовать его в проекте, который, имея собственный журнал, использовал библиотеку, которая также имела бы свой собственный журнал. Я думал, что все будет работать нормально (в конце концов, программное обеспечение - не используемая библиотека), но я был неправ: фактически только один экземпляр системы журналов создавался как для приложения, так и для используемой библиотеки.

Теперь я сталкиваюсь с этой ситуацией, и после нескольких раз, я не мог обойти: я не хочу использовать этот класс, как обычно, объявив объект, и начать передавать его везде с extern, но лучше работайте так же, как в Singleton: просто #include заголовок и начинайте вызывать методы с помощью глобальной функции instance(). Как я могу сделать это без использования Singleton в этом классе регистратора?

Один из способов, который я выяснил, - это создать разные классы Singleton для каждого проекта (lib и основное приложение), просто имея объект класса logger, но мне интересно услышать другие альтернативы.

1 ответ

Присвойте дескриптор каждому экземпляру журнала и получите журнал по экземпляру. В библиотеке добавить функцию, которая возвращает дескриптор для библиотеки, в приложении добавить функцию, которая возвращает дескриптор для журнала приложения. И не забывайте, что Singlton мешает использовать шаблон дизайна, избегайте их.

Другие вопросы по тегам