在 C++ 中将 Base 对象转换为 Derived 对象

Convert from a Base object to a Derived object in C++

我正在尝试抽象部分代码以独立于平台。

我有一段代码正在创建 Base class IModel.

的对象
std::shared_ptr<IModel> joint_model_3d = std::make_shared<IModel>();

我还有一段代码负责渲染。为了呈现对象,我需要将其转换为派生的 class Direct3DModel

class Direct3DModel : public IModel

我知道我可以为独立于平台的代码部分从 Direct3DModelIModel 执行 dynamic_cast,然后 dynamic_cast 回到 Direct3DModel 用于渲染。

我的问题是,我可以在平台独立代码中创建一个 Base class IModel 的对象,它不应该知道 Direct3DModel,并将其转换为 Direct3DModel 当我需要它来渲染时。

为此,我是否需要某种与平台无关的对象创建器class?

My question is, can I create an object of the Base class IModel in the platform independent code, which is not supposed to know Direct3DModel, and convert it to Direct3DModel when I need it for rendering.

不,那行不通。

您必须在了解 class 的代码库中创建一个 Direct3DModel 对象。平台无关代码需要调用平台相关代码来构造这样一个对象。您可以使用 Factory Pattern 来实现该功能。

独立于平台的代码必须使用基本 class 指针和引用(在您的情况下为 IModel)。只要 pointer/reference 指向一个 Direct3DModel 对象,您就可以在特定于平台的代码中使用 dynamic_cast 来获取 pointer/reference 到 Direct3DModel 以继续使用特定于平台的逻辑。

Would I need some kind of object creator class that is not platform independent for this?

是的。工厂模式促进了这一点。