class Component {
// Code here
};
class TransformComponent : public Component {
// Code here
};
class Entity:
public:
Component components[25];
TransformComponent *getTransform() {
for(int i = 0; i < 25; i++) {
if(typeid(components[i]) == typeid(TransformComponent())) {return *(components + i);}
}
}
};
Run Code Online (Sandbox Code Playgroud)
我有一个组件数组,里面可以是“Component”的任何子类,例如“TransformComponent”。问题是,在编译时,计算机认为组件数组仅填充有“Component”对象。该函数应该返回一个“TransformComponent”,编译器将其视为错误,即使我返回的数组中的元素是 TransformComponent。有没有办法解决这个问题(最好是简单的)?
“我有一个组件数组,里面可以是“Component”的任何子类,例如“TransformComponent”。” - 这个说法是错误的。如果您有一个对象数组Component,那么在数组中的每个索引处,都恰好有一个Component- 类型化的对象,而不是后代。
如果您想存储多个(例如基础后代)类型,您有两个主要选择:
std::vector<std::unique_ptr<Component>> componentsstd::vector<std::variant<Component, TransformComponent/*, ... other types*/> components>;