gpt4 book ai didi

c++实体组件系统和使用模板访问组件

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:37 24 4
gpt4 key购买 nike

我一直致力于创建自己的实体组件系统,并且我准备通过执行以下操作来获取组件:

const auto& component = entity->GetComponent<ComponentType>();

上面的函数看起来像这样:

template <typename TyComponent>
TyComponent* Entity<T>::GetComponent() const
{
return &(GetComponent(TyComponent::Id());
}

然后根据关联的 id 返回一个组件,否则 nullptr

  1. 我正在做的事情可行吗?
  2. 有没有办法确保只有派生自 Component 的类型可以用作 GetComponent 的参数?

最佳答案

这个设计还可以。

如果有人尝试 GetComponent<Foo>,您将得到一个编译时错误,但是 Foo没有静态 Id()功能。所以这会给你一点安全感。

但是,它仍然需要修改一下才能编译。以下是我的做法:

Component * GetComponent(int id) { ... }

template <typename TyComponent>
TyComponent* Entity<T>::GetComponent() const {
return dynamic_cast<TyComponent*>(GetComponent(TyComponent::Id()));
}

这现在会在 TyComponent 时产生一个编译错误。不是来自 Component . (组件至少需要一个虚函数才能工作。)

关于c++实体组件系统和使用模板访问组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31217499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com