C++ C++;:在ABC的子类上强制执行Singleton
在一个已经存在的模拟框架中,我试图在已经存在的抽象模型基类上实现状态模式。由于模型类只是ABC,所以状态也应该是ABC。 我正在寻找一种方法,在州ABC的所有可能的子类上强制执行单例模式 以下是我迄今为止所做的尝试: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
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>