我目前正在实现一个小型软件,我想在Mac OS和Window OS上进行此软件工作,因此我想在Mac环境中使用GLFW,在Windows环境中使用Window API(我知道GLFW是跨平台的,但这不是重点。 )
我的问题是设计实现问题:我创建了一个windowManager
类,该类保留一个Window
类的实例。此Window
保留一个对象的实例,该对象是PatternWindow
,其中PatternWindow
是接口。我有一个实现PatternGLFW3_VULKAN
的对象PatternWindow
。该PatternGLFW3_VULKAN
具有成员GLFWwindow * _window
,并且PatternGLFW3_VULKAN
用_window
初始化glfwCreateWindow(...)
。
class Window : public Singleton<Window>
{
public:
somefunction(...)
initializePatternWindow(unique_ptr<PatternWindow>&& patternWindow)
unique_ptr<PatternWindow> getPatternWindow(){return _patternWindow;}
private:
unique_ptr<PatternWindow> _patternWindow;
}
class PatternWindow
{
public:
PatternWindow();
virtual ~PatternWindow();
virtual void initialize() = 0;
virtual void destroy () = 0;
};
class PatternGLFW3_VULKAN : public PatternWindow
{
public:
PatternGLFW3_VULKAN ();
~PatternGLFW3_VULKAN();
virtual void initialize();
virtual void destroy();
const GLFWwindow& getWindow() const {return *_window;}
private:
GLFWwindow * _window;
};
我的问题是关于我的getWindow()
类中的PatternGLFW3_VULKAN
函数;我如何在getWindow()
类中创建虚拟PatternWindow
函数,以便在运行时获取GLFWwindow*
的PatternGLFW3_VULKAN
窗口。如果我在Mac OS环境中,则可以在GLFWwindow& getWindow()
中创建虚拟函数PatternWindow
,但是如果我在Window环境中运行软件,则GLFWwindow
的虚拟函数getWindow()
的类型patternWindow
]班级不正确...
如何在getWindow()
中拥有虚拟的PatternWindow
并在运行时返回Windows API屏幕返回GLFWwindow
或实例?
编辑:
class PatternWindow
{
public:
PatternWindow();
virtual ~PatternWindow();
virtual void initialize() = 0;
virtual void destroy () = 0;
virtual /*UNKNOW TYPE AT THE COMPILATION*/ getWindow() = 0;
};
/*UNKNOW TYPE AT THE COMPILATION*/
是我的问题,我不知道如何处理,当我在Mac OS和Windows实例中进行Windows API编译时,在Mac OS和Windows实例中获得GLFWwindow *。
在我的软件的主循环中想要这样的东西
int main(int argc, char** argv)
{
//initialisation of all my managers ans the data ect..
while(!WindowClosed(Window::getPatternWindow()->getWindow()))
{
//DO SOME STUFF
}
}
我目前正在实现一个小型软件,我想在Mac OS和Window OS上进行此软件工作,所以我想在Mac环境中使用GLFW,在Windows环境中使用Window API(我知道GLFW是跨平台的...
您正在走向的模式可以完成,但是您稍后可能会后悔。我从您的设置中推断出,您有两个WindowClosed()
重载–一个参数为GLFWwindow
的重载,另一个参数为WinAPI类型的重载。前者将使用GLFW方法检测窗口是否关闭,而后者将使用Windows API。一个问题是组织的问题:多少文件包含GLFW特定的方法?也许您甚至拥有同时包含GLFW方法和Win API方法的文件?这不一定是错误的,但从长远来看可能会很痛苦。另一个问题是该方法与传统的面向对象方法不同。