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);}
}
}
};
我有一個組件陣列,里面可以是“組件”的任何子類,比如“TransformComponent”。問題是,在編譯時,計算機認為組件陣列只填充了“組件”物件。該函式應該回傳一個“TransformComponent”,并且編譯器認為這是一個錯誤,即使我回傳的陣列中的元素是一個 TransformComponent。有什么解決辦法嗎(最好是簡單的)?
uj5u.com熱心網友回復:
'我有一個組件陣列,里面可以是“組件”的任何子類,比如“TransformComponent”。- 這種說法是錯誤的。如果你有一個Component物件陣列,那么在陣列中的每個索引處,都有一個 - 型別的Component物件而不是后代。
如果您想存盤多個(例如 Base-Descendants)型別,您有兩個主要選擇:
- 使用(智能)指標的容器:
std::vector<std::unique_ptr<Component>> components - 使用變體:
std::vector<std::variant<Component, TransformComponent/*, ... other types*/> components>;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/537393.html
標籤:C 数组哎呀
