我正在尝试将代码抽象为与平台无关的部分。
我有一段代码是创建基类IModel
的对象。
std::shared_ptr<IModel> joint_model_3d = std::make_shared<IModel>();
我有另一段负责渲染的代码。为了渲染对象,我需要将其转换为派生类Direct3DModel
class Direct3DModel : public IModel
我知道我可以做dynamic_cast
从Direct3DModel
到IModel
的代码部分是平台独立的,然后dynamic_cast
回到Direct3DModel
渲染。
我的问题是,我可以在平台独立的代码中创建一个基类IModel
的对象,它不应该知道Direct3DModel
,并在我需要它进行渲染时将其转换为Direct3DModel
。
我是否需要一些不独立于平台的对象创建器类?
我的问题是,我可以在平台独立代码中创建基类
IModel
的对象,该对象不应该知道Direct3DModel
,并在我需要它进行渲染时将其转换为Direct3DModel
。
不行,不行。
您必须在代码库中创建一个了解该类的Direct3DModel
对象。与平台无关的代码需要调用与平台相关的代码来构造这样的对象。您可以使用工厂模式来实现该功能。
与平台无关的代码必须使用基类指针和引用(在您的情况下为IModel
)。只要指针/引用指向Direct3DModel
对象,您就可以在特定于平台的代码中使用dynamic_cast
来获取指向Direct3DModel
的指针/引用,以继续执行特定于平台的逻辑。
我是否需要某种对象创建器类,不是平台独立的?
是的。工厂模式有助于这一点。