好吧,爲了說明我遇到的問題,我將顯示一些(僞)代碼。無法返回包含派生指針的向量
可以說我有以下型號:
class Animal : public GameObject;
class Player : public GameObject;
class GameObject : public ObjectInterface;
class ObjectInterface
{
public:
virtual ~ObjectInterface() = default;
virtual vec3 GetPosition() = 0;
}
現在我還保存一些「對象上下文」,它擁有一定的遊戲對象的集合。
class ContextObject
{
// they implement ObjectInterface
vector<shared_ptr<Animal>> animals;
vector<shared_ptr<Player>> players;
}
現在我有一個TargetSelector
類,它只有在ObjectInterface
直接作用。
class TargetSelector
{
// this is somehow not possible, although `animals` are a subclass of `ObjectInterface`
vector<shared_ptr<Model::ObjectInterface>>& GetAvailableTargets()
{
return context->animals; // context is some `ObjectContext`
}
}
我希望上面的代碼工作,因爲一個Animal
是類型ObjectInterface
的。但相反,我得到一個錯誤,說它不能從vector<shared_ptr<Animal>>
轉換爲vector<shared_ptr<ObjectInterface>>
。這甚至假設工作?
有人可以解釋我爲什麼我不能做這種多態性,如果可能的話,一個很好的解決方案,所以我可以做到這一點。
謝謝,任何幫助表示讚賞!
'shared_ptr '和'shared_ptr '是不同的類型。您可以將一個轉換爲另一個,但不能將它們別名。如果你想創建一個'vector >',你需要填寫'shared_ptr '等副本。 –
也許你應該在所有情況下都存儲'shared_ptr',動物'如果需要可以投入使用 –