【发布时间】:2019-11-09 15:05:01
【问题描述】:
我有一个Component 的基类和多个派生类,例如MeshComponent。 Entity 类将所有 Components 存储为 std::shared_ptr 中的 std::unordererd_map caaled m_Components,因此我创建了以下函数来从地图中获取组件:
const std::shared_ptr<Component>& Entity::GetComponent(ComponentType type)
{
switch (type)
{
case ComponentType::None:
EG_CORE_ASSERT(false, "Component of type None is not supported!");
return nullptr;
case ComponentType::Transform:
return std::dynamic_pointer_cast<TransformComponent>(m_Components[ComponentType::Transform]);
case ComponentType::Mesh:
return std::dynamic_pointer_cast<MeshComponent>(m_Components[ComponentType::Mesh]);
}
}
ComponentType 是一个包含所有组件类型的枚举类。
问题是当我在我的主文件中调用这个函数返回指针时,我只是指向基类,我不能调用特定于某些组件的函数。
我尝试将这些指针投射到我的主文件中,如下所示:
std::dynamic_pointer_cast<Engine::MeshComponent>(testEntity.GetComponent(Engine::ComponentType::Mesh))->SetVertexArray(m_VertexArray);
但这会返回我的内存访问冲突。
【问题讨论】:
标签: c++ polymorphism shared-ptr dynamic-cast downcast