![]() |
1
3
您在这里的一个类中混合了两个不相关的函数。首先,它充当声明和初始化StateManager和InputSystem成员的语法快捷方式。其次,它声明抽象的create_window函数。 如果您认为应该有一个公共接口-编写一个接口(纯抽象类)。 此外,使用初始化(循环等)方法和事件回调编写类似于OgreManager的自包含类。由于应用程序可以随时创建和初始化这个对象,所以第二个问题会自动解决。 您的设计可能会为创建新的应用程序对象节省几行代码,但代价是使用可能较长的继承行来维护类似于soup的主对象。 使用接口和回调。 P.S.:更不用说,在构造函数中调用虚拟函数并不意味着您可能期望的结果。 |
![]() |
2
2
是的,这是一个很好的设计,也是我自己用的。 对于您的第二个问题,我将从基本构造函数中删除任何可能不适用于派生类的内容。如果Ogre想要创建窗口本身,那么您需要允许它这样做,我认为在CreateWindow中初始化Ogre是没有意义的(这有误导性)。 您可以添加一个初始化呈现系统虚拟方法,但我认为您应该将该任务留给派生类的构造函数。应用程序初始化总是一项棘手的任务,而且非常难以抽象。根据我的经验,最好不要对派生类可能要做的事情做任何假设,并且让它以它想要的任何方式自己完成工作。 也就是说,如果您能想到一些绝对适用于任何可以想到的派生类的东西,那么可以随意地将其添加到基本构造函数中。 |
![]() |
timurichk · 我的类不重写抽象方法compareTo 7 年前 |
![]() |
Steffn · angular 4中抽象类的动态多提供程序 7 年前 |
![]() |
Fabio Piunti · Abstract类子类的调用方法 7 年前 |
![]() |
Sunny Deshmukh · 可以从Java中的多个抽象类继承吗? 7 年前 |
![]() |
Felix · 初始化抽象类的一般变量 7 年前 |
![]() |
wheeeee · Scala对象扩展了抽象类/特征,访问伴随类字段 7 年前 |