在 dll AI 中有一个模板单例:
template <class T>
class Singleton
{
public:
static T &instance()
{
static T _instance;
return _instance;
}
private:
//All constructors are here
};
在 Dll BI 中定义一个类 Logger。Dlls C、D 和 E 使用 Logger,它的访问方式如下:
Singleton<Logger>::instance();
问题是每个 dll 都实例化了自己的
Singleton<Logger>.
而不是使用相同的单例实例。我知道这个问题的解决方案是使用外部模板。即 dll C、D 和 E 必须包括
extern template class Singleton<Logger>;
和 dll B 必须包括:
template class Singleton<Logger>;
这仍然会导致创建多个模板实例。我尝试将 extern 放入所有 dll 中,但它仍然不起作用我尝试从所有 dll 中删除 extern,它仍然不起作用。这不是实现模板单例的标准方法吗?这样做的正确方法是什么?