我一直致力于创建自己的实体组件系统,并且我已经开始通过执行以下操作来获取组件:
const auto& component = entity->GetComponent<ComponentType>();
上面的函数看起来像这样:
template <typename TyComponent>
TyComponent* Entity<T>::GetComponent() const
{
return &(GetComponent(TyComponent::Id());
}
然后,如果找到,则返回基于关联ID的组件,否则为nullptr
。
GetComponent
?答案 0 :(得分:2)
这个设计还可以。
如果有人尝试<% --- your code--- %>
,您已经收到编译时错误,但GetComponent<Foo>
没有静态Foo
功能。这样可以给你一点安全感。
但是,它仍然需要一个更改才能编译。以下是我的表现:
Id()
当Component * GetComponent(int id) { ... }
template <typename TyComponent>
TyComponent* Entity<T>::GetComponent() const {
return dynamic_cast<TyComponent*>(GetComponent(TyComponent::Id()));
}
未派生自TyComponent
时,现在会生成编译错误。 (组件至少需要一个虚函数才能工作。)