В dll A у меня есть шаблон singleton:
template <class T>
class Singleton
{
public:
static T &instance()
{
static T _instance;
return _instance;
}
private:
//All constructors are here
};
В Dll B я определяю класс Logger. Dlls C, D и E используют Logger, и к нему обращаются следующим образом:
Singleton<Logger>::instance();
Проблема заключается в том, что каждый dll создает экземпляр
Singleton<Logger>.
вместо того, чтобы использовать один и тот же экземпляр singleton. Я понимаю, что решение этой проблемы - использование шаблонов extern. Это dlls C, D и E должны включать
extern template class Singleton<Logger>;
и dll B должны включать:
template class Singleton<Logger>;
Это все равно вызывает создание более одного экземпляра шаблона. Я попытался поместить extern во все DLL, и он все еще не работает. Я попытался удалить extern из всех DLL, и он все еще не работает. Разве это не стандартный способ реализации шаблонных синглетонов? Каков правильный способ сделать это?