gpt4 book ai didi

C++ - 设计问题

转载 作者:行者123 更新时间:2023-11-28 01:10:46 24 4
gpt4 key购买 nike

我正在研究游戏引擎原型(prototype)并有以下问题:

现在我的引擎实现是 DirectX 绑定(bind)的,一切正常。

我有一个 core::Renderer 类,它具有渲染几何、设置着色器、闪电等的方法...

有些是模板化的,有些不是。

class Renderer {

// ...
template <typename Geometry> RenderGeometry(shared_ptr<Geometry> geometry);
};

假设我想扩展我的引擎的灵 active ,但我不希望它使用 DirectX 和 OpenGL 工作。据我现在的理解,这个想法是将所有特定于接口(interface)的东西都带到基类 core::Renderer 中,使所有这些调用成为 virtual 然后提供它们的 特定于 DirectX特定于 OpenGL 的实现。

如果我的几何对象不是模板,一切都会看起来更好:

class Renderer {

virtual void RenderGeometry(shared_ptr<core::Non_template_Geometry> geometry);

};

class DXRenderer {

// Here goes our custom implementation
// for DirectX-based geometry rendering
virtual void RenderGeometry(...)
};

// The same for OpenGL

第一个(初始变体)的问题是不允许对虚函数进行模板化。

那么问题来了——我该如何解决?

对于这种情况或模板虚拟函数仿真有任何技巧/技巧/模式吗?

最佳答案

使用基 Geometry 类:

class Geometry {
public:
virtual ~Geometry() { }
virtual void Render() = 0;
};

并让您的每个几何类型类派生自该基类,并通过重写 Render 实现它们的特定渲染功能。

然后,Renderer::RenderGeometry 不需要是函数模板;它可以简单地获取指向 Geometry 基类的指针并调用虚函数 Render

关于C++ - 设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3392596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com