情况是什么:
问题是这样的-为了使我的程序跨平台,我为操作系统执行的操作做了一个抽象层。有一个称为SystemComponent
的抽象基类,它看起来像这样:
class SystemComponent{
public:
//some functions related to operations for OS
virtual WindowHandle CreateNewWindow(/*...*/) = 0;
virtual void Show_Message(/*...*/) = 0;
//...
}
然后由另一个特定于操作系统的类继承,例如Windows的
WindowsSystemComponent
:#ifdef _WIN23
class WindowsSystemComponent : SystemComponent{
public:
virtual WindowHandle CreateNewWindow(/*...*/);
virtual void Show_Message(/*...*/);
//...
protected:
//Windows specific things...
}
#endif
然后,此
WindowsSystemComponent
隐含OS特定的功能。要在Windows中创建系统组件,请执行以下操作:
WindowsSytemComponent* pWSystemComp = new WindowSystemComponent();
//...
//And the pass a pointer to this to the crossplatform code like this
pFrameWork->SetSystem((SystemComponent*)pWSystemComp);
其中框架调用
SystemComponent
中指定的OS函数,并将指针传递给子类需要的任何指针。需要什么:
我想删除指针的传递,并使要使用它们的每个对象都可以访问
SystemComponent
类和特定于OS的Function隐含方法。最好的方法是使它成为Singleton,但是我试图做类似的事情virtual static SystemComponent* Instance() { /*...*/ };
在
SystemComponent
类的内部,这是抽象的,我得到一个编译器错误,说不允许这样做。那我该怎么办呢?
最佳答案
您不能使用虚拟的静态方法,但是Instance方法不必是虚拟的-它只需要为您所运行的平台创建正确的SystemComponent即可。您只需要获取现在使用的代码即可为平台创建SystemComponent实例并将其放入Instance方法中。