在 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
我知道我可以为独立于平台的代码部分从 Direct3DModel
到 IModel
执行 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?
是的。工厂模式促进了这一点。
我正在尝试抽象部分代码以独立于平台。
我有一段代码正在创建 Base class IModel
.
std::shared_ptr<IModel> joint_model_3d = std::make_shared<IModel>();
我还有一段代码负责渲染。为了呈现对象,我需要将其转换为派生的 class Direct3DModel
class Direct3DModel : public IModel
我知道我可以为独立于平台的代码部分从 Direct3DModel
到 IModel
执行 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 knowDirect3DModel
, and convert it toDirect3DModel
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?
是的。工厂模式促进了这一点。