Кто-нибудь знает, возможно ли иметь такой класс, как регистратор:
-
с использованием одноэлементного или глобального (a la std:: cout)
-
передача экземпляра/указателя/ссылки на каждый способ, который ему нужен
Я беру пример класса logger, но у меня есть несколько классов в моем приложении, которые выиграют от этого (например, менеджер отмены).
В каждом решении есть несколько проблем:
-
использование синглтона проблематично для тестирования (наряду со многими причинами, по которым не рекомендуется использовать его). Это то же самое с глобальным. Кроме того, ничто не гарантирует, что в приложении будет только один экземпляр, и это даже не требование (почему, например, нет 2 регистраторов?)
-
передача его каждому конструктору объекта (инъекция зависимостей), приводит к большому шаблону кода и может быть подвержена ошибкам, потому что вам приходится копировать/вставлять один и тот же код много раз. Можно ли серьезно подумать о наличии указателя на Logger в каждом конструкторе каждого класса???????
Итак, мне было интересно, есть ли в С++ третий вариант, о котором я никогда не слышал? Для меня это похоже на то, что под капюшоном потребуется черная магия, но я был приятно удивлен некоторыми методами, которые я узнал в переполнении стека, которые я не мог найти в google, поэтому я знаю, что здесь есть настоящие гуру;)
Удивительно, но я нашел много дискуссий о том, как создавать одиночные игры, или почему нельзя использовать одиночные игры, но я не мог найти сообщение, касающееся моей проблемы...