在c++中从基对象转换为派生对象



我正在尝试将代码抽象为与平台无关的部分。

我有一段代码是创建基类IModel的对象。

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

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

class Direct3DModel : public IModel

我知道我可以做dynamic_castDirect3DModelIModel的代码部分是平台独立的,然后dynamic_cast回到Direct3DModel渲染。

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

我是否需要一些不独立于平台的对象创建器类?

我的问题是,我可以在平台独立代码中创建基类IModel的对象,该对象不应该知道Direct3DModel,并在我需要它进行渲染时将其转换为Direct3DModel

不行,不行。

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

与平台无关的代码必须使用基类指针和引用(在您的情况下为IModel)。只要指针/引用指向Direct3DModel对象,您就可以在特定于平台的代码中使用dynamic_cast来获取指向Direct3DModel的指针/引用,以继续执行特定于平台的逻辑。

我是否需要某种对象创建器类,不是平台独立的?

是的。工厂模式有助于这一点。

最新更新