C++ C++;:在ABC的子类上强制执行Singleton

C++ C++;:在ABC的子类上强制执行Singleton,c++,singleton,abstract-base-class,C++,Singleton,Abstract Base Class,在一个已经存在的模拟框架中,我试图在已经存在的抽象模型基类上实现状态模式。由于模型类只是ABC,所以状态也应该是ABC。 我正在寻找一种方法,在州ABC的所有可能的子类上强制执行单例模式 以下是我迄今为止所做的尝试: template<typename T> class SingletonBase { public: [...] static T* getInstance() { if (instance == nullptr) { instance

在一个已经存在的模拟框架中,我试图在已经存在的抽象模型基类上实现状态模式。由于模型类只是ABC,所以状态也应该是ABC。 我正在寻找一种方法,在州ABC的所有可能的子类上强制执行单例模式

以下是我迄今为止所做的尝试:

template<typename T> class SingletonBase
{
public:
[...]
static T* getInstance()
{
    if (instance == nullptr)
    {
        instance = new T();
    }
    return instance;
}
protected:
  SingletonBase(){}
  static T* instance;
模板类SingletonBase
{
公众:
[...]
静态T*getInstance()
{
if(实例==nullptr)
{
实例=新的T();
}
返回实例;
}
受保护的:
SingletonBase(){}
静态T*实例;
以下是我所在州的ABC:

template <typename A, typename B, typename StateType>
class State : public SingletonBase<StateType>
{
public:
  virtual ~State(){}

  virtual void foo(Context<A,B,StateType>* ctx, ...) = 0;

  virtual void bar(Context<A,B,StateType>* ctc, ...) = 0;

protected:
  State(){}

virtual void changeState(Context<A, B, StateType>* ctx, State<A, B, StateType>* state);

private:
  friend class SingletonBase<State<A, B, StateType>>;
};
模板
类状态:公共单音基
{
公众:
虚拟~State(){}
虚拟void foo(上下文*ctx,…)=0;
虚拟空白条(上下文*ctc,…)=0;
受保护的:
状态(){}
虚拟void changeState(Context*ctx,State*State);
私人:
朋友级单音基音;
};
上下文类采用三个相同的模板参数,因为它需要知道其状态的类型。 一个新的类模板最终继承了上下文和所用模型的ABC

我现在尝试为模拟中使用的具体状态创建基类,方法如下(需要该基类,以便所有上下文都具有相同的类型):

class StateBaseForSimulationScenario:公共状态
现在我遇到两个问题:

1) 显然,statebase的每个子级的getInstance()方法将只生成一个statebase

2) 如果我不使用statebase类型作为模板参数,而是使用具体类型,则上下文将不匹配(例如,带有参数StateIdle的上下文显然与带有参数StateProducting的上下文的类型不同)

我的问题是:有没有办法把所有未来的国家级的孩子都变成一个单身汉?或者在C++中不可能这样?

注:如果你的答案是Sigleton是反模式/糟糕的设计等,或者我应该使用boost:请不要。谢谢

class StateBaseForSimulationScenario : public State<foobar, barfoo, StateBaseForSimulationScenario>