静态单身?

Jos*_*ias 1 c++ static templates

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

这不应该工作吗?

**

更新

**

感谢到目前为止的回复.所以现在我的问题是GameEngine无法看到它自己的构造函数.我知道这是私人但仍然.

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;
}
Run Code Online (Sandbox Code Playgroud)

GameEngine.h

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

};
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 6

我不知道它是如何工作的,因为没有什么能阻止你创建更多的实例GameEngine.

即使有可能(而且是)有一种创建单例(也许涉及宏)的通用方法,我会反对它,因为你真正想要单身的情况很少见.让我重新说一下......你真正需要单身人士的情况很少见.

  • @JoshElias我不是这么说的.在某些情况下我不反对单身人士.我所说的是,如果你实现一种机制来自动创建它们,那你就走错了路.如果你有几个单例,就不需要这样的机制,你可以单独编写它们.如果你有很多这样的东西,想要一种机制来自动化他们的创作,你肯定会在错误的轨道上肯定. (2认同)