我对 C++ 比较陌生,并且来自 C# 背景我在这个列表迭代中遇到了麻烦:
我有一种方法可以遍历对象列表并为每个对象调用一个更新方法,效果很好。该列表具有类型std::list<EngineComponent>
,称为engineComponents
。
void Game::Update()
{
for (EngineComponent component: this->engineComponents)
{
component.Update();
}
}
我也有一个EngineComponent
被调用的子类DrawableEngineComponent
。
当我尝试进行类似的迭代时出现问题:
void Game::Draw()
{
for (DrawableEngineComponent component: this->engineComponents)
{
component.Draw();
}
}
这会产生错误“不存在从 'EngineComponent' 到 'DrawableEngineComponent' 的合适的用户定义转换”。鉴于这个实现在 C# 中都很好而且很花哨,我不确定如何最好地在 C++ 中解决这个问题。
我可以想到一些可以/应该工作的替代方法,但我想知道 C++ 中是否有功能以类似于 C# 的方式执行此操作,而无需手动定义转换。
有关两个类别的定义如下:
class EngineComponent
{
public:
EngineComponent(void);
~EngineComponent(void);
virtual void Update(void);
};
class DrawableEngineComponent : public EngineComponent
{
public:
DrawableEngineComponent(void);
~DrawableEngineComponent(void);
virtual void Draw(void);
};
是的,我稍微复制了 XNA 框架;)