Я пытаюсь создать игровой движок, используя Gameobject и компоненты, похожие на Unity. У меня есть класс компонентов:
class Component
{
public:
virtual void DoTheThing(){//Doing the thing};
}
Класс текстуры, производный от компонента, с переопределенной функцией:
class Texture : public Component
{
public:
void DoTheThing(){//Doing a different thing};
}
Класс GameObject с картой компонентов, в которой хранятся производные компоненты:
class GameObject
{
private:
map<string, Component> components;
Texture texture;
components["id"] = texture;
public:
Component getComponent(string id){ return components[id];}
}
И наконец:
int main(int argc, char* args[])
{
GameObject gameObject;
gameObject.getComponent("id").DoTheThing();
}
Я хочу иметь возможность вызывать функцию DoTheThing(), которая существует в производном классе, но вызывает только функцию DoTheThing() базового класса.
map<string, std::shared_ptr<Component>> components;
?? - person πάντα ῥεῖ   schedule 04.12.2016