是否可以制作通用单例?我想创建一些我可以继承并获得单例功能的东西。我在使用带有静态成员的模板时遇到麻烦。

这不行吗?

**

更新

**

到目前为止,感谢您的答复。所以现在我的问题是GameEngine看不到它自己的构造函数。我知道它是私有(private)的,但仍然是。

Singleton.h

template <typename T>
class Singleton
{
private:
    static std::shared_ptr<T> m_Instance;
public:
    static std::shared_ptr<T> Instance();
};

template<typename T>
std::shared_ptr<T> Singleton<T>::m_Instance = nullptr;

template<typename T>
std::shared_ptr<T> Singleton<T>::Instance()
{
if(m_Instance == nullptr)
    m_Instance = std::make_shared<T>();

return m_Instance;
}

GameEngine.h
class GameEngine : public Singleton<GameEngine>
{
private:
GameEngine();

};

最佳答案

创建单例的最佳方法如下:

class GameEngine
{
public:
    static GameEngine& instance() { static GameEngine e; return e; }

private:
    GameEngine() {}
    GameEngine(const GameEngine&) = delete;
};

第一次调用实例时,将(线程安全)初始化e变量,并在有序进程退出时销毁它。私有(private)/删除的构造函数阻止创建第二个实例。

10-01 17:19