Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ IDirect3DDevice9的子类?_C++_Inheritance_Directx 9 - Fatal编程技术网

C++ IDirect3DDevice9的子类?

C++ IDirect3DDevice9的子类?,c++,inheritance,directx-9,C++,Inheritance,Directx 9,是否可以创建并使用IDirect3DDevice9的子类?我的代码这样做会非常方便,但我看到设备指针是从IDirect3D9::CreateDevice()中作为out参数给出的,我不能告诉它生成我的子类的实例 我希望能够做到这一点,以便使用IDirect3DDevice9的其他代码在我希望它使用具有扩展功能的设备子类时不必更改。具体来说,在实际绘制完成之前,每当调用IDirect3DDevice9::Draw()的任何变量时,子类需要读取设备的渲染状态设置并更新着色器变量以匹配。同样,我不希望

是否可以创建并使用
IDirect3DDevice9
的子类?我的代码这样做会非常方便,但我看到设备指针是从
IDirect3D9::CreateDevice()
中作为out参数给出的,我不能告诉它生成我的子类的实例

我希望能够做到这一点,以便使用
IDirect3DDevice9
的其他代码在我希望它使用具有扩展功能的设备子类时不必更改。具体来说,在实际绘制完成之前,每当调用
IDirect3DDevice9::Draw()
的任何变量时,子类需要读取设备的渲染状态设置并更新着色器变量以匹配。同样,我不希望其他使用d3d设备的代码发生变化,因为我希望它能够使用常规设备或我的扩展设备


是否可以使用基类的实例创建子类的实例?如果是这样,是否会导致任何问题,如Direct3D未设置为使用子类实例,或内存中有多个设备实例,因此必须共享gfx卡资源等。?或者我应该想一个不用子类的方法来解决这个问题吗?

我最终按照上面ErikEsTT的建议创建了一个单独的类,其中包含IDirect3DDevice9指针并提供多余的功能。这不是我想要的解决方案,因为它不是一个无缝接口-客户端代码仍然必须显式地调用单独的方法。但是它是有效的。

为什么不使用
IDirect3DDevice9*
作为类的成员,而不是继承?这样做需要使用
IDirect3DDevice9*
的其他类和代码使用包含设备指针的其他类,以获得额外的功能。也许这是最好的选择,但我想无缝地利用多态性来发挥我的优势。