我无法在 subclasses 中维护 base class 的状态
I can't maintain state of a base class amongst subclasses
总结
我的目标是使用 DirectX 11
编写渲染引擎。我计划以面向对象的方式编写它。
计划是编写单独的 classes。特别是一个 class 用于 shader
,我可以在其中加载、编译、绑定和设置它以供使用。第二个 class 用于创建 vertex buffer
,我可以在其中加载顶点、绑定缓冲区并将其设置为渲染。
我的尝试
我写了一个基础 class `A` 用于初始化 DirectX 并维护 2 个对象,`m_device` 和 `m_device_context`。然后正如我写的 `2` subclasses `B` 和 `C`。
在 class B
我创建并绑定顶点缓冲区,在 C
我编译并绑定顶点着色器。
B
和 C
都使用 m_device
对象创建对象,m_device_context
到 bind/set 它们。
在subclassB
中,我使用subclassC
编译绑定shaders
。
使用 subclass B
我初始化 Base class。但是在 C
subclass 处,我在 m_device
上获得了内存 Access violation
。这可能是因为我必须重新初始化基础 class 但我不能拥有 DirectX
对象的不同实例。
问题
我读过不推荐使用全局变量或对象,但是我该如何解决这个问题,如何维护项目中需要的全局对象?
(我的问题专门针对 C++ 实现,而不是游戏)
我无权访问该项目,但我制作了一个快速的 UML 图,我希望这有助于澄清一点
继承建立在 is-a
关系之上。大多数人误解的是,它不是从对象本身的角度来看的,而是基于对象带来的功能。
在您的情况下,D3D class 的功能是初始化和分配 3D 引擎上下文。对吗?
Demo 和 Shader classes 不扩展该行为,这意味着没有 is-a
关系。
所以在您的情况下,那些 classes 需要 D3D class 才能运行。另一个解决方案可能是在 Demo 或 Shader 中根本不使用 D3D class。这取决于 D3D class 是否提供演示或着色器 class 使用的任何其他功能(方法)。
您在 classes 中公开字段时也应该非常小心,因为当您的应用程序增长时,它会变得非常令人头疼。尝试通过方法公开功能。
总结
我的目标是使用 DirectX 11
编写渲染引擎。我计划以面向对象的方式编写它。
计划是编写单独的 classes。特别是一个 class 用于 shader
,我可以在其中加载、编译、绑定和设置它以供使用。第二个 class 用于创建 vertex buffer
,我可以在其中加载顶点、绑定缓冲区并将其设置为渲染。
我的尝试
我写了一个基础 class `A` 用于初始化 DirectX 并维护 2 个对象,`m_device` 和 `m_device_context`。然后正如我写的 `2` subclasses `B` 和 `C`。在 class B
我创建并绑定顶点缓冲区,在 C
我编译并绑定顶点着色器。
B
和 C
都使用 m_device
对象创建对象,m_device_context
到 bind/set 它们。
在subclassB
中,我使用subclassC
编译绑定shaders
。
使用 subclass B
我初始化 Base class。但是在 C
subclass 处,我在 m_device
上获得了内存 Access violation
。这可能是因为我必须重新初始化基础 class 但我不能拥有 DirectX
对象的不同实例。
问题
我读过不推荐使用全局变量或对象,但是我该如何解决这个问题,如何维护项目中需要的全局对象?(我的问题专门针对 C++ 实现,而不是游戏)
我无权访问该项目,但我制作了一个快速的 UML 图,我希望这有助于澄清一点
继承建立在 is-a
关系之上。大多数人误解的是,它不是从对象本身的角度来看的,而是基于对象带来的功能。
在您的情况下,D3D class 的功能是初始化和分配 3D 引擎上下文。对吗?
Demo 和 Shader classes 不扩展该行为,这意味着没有 is-a
关系。
所以在您的情况下,那些 classes 需要 D3D class 才能运行。另一个解决方案可能是在 Demo 或 Shader 中根本不使用 D3D class。这取决于 D3D class 是否提供演示或着色器 class 使用的任何其他功能(方法)。
您在 classes 中公开字段时也应该非常小心,因为当您的应用程序增长时,它会变得非常令人头疼。尝试通过方法公开功能。