Bonjour,
J'ai une structure Component, et deux autres structures Position et Health :
Et puis j'ai une structure System :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 struct Component {}; struct Position : Component {int x;}; struct Health : Component {};
Et dans mon main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 template<typename...T> struct System { std::vector<Component*> vector; std::tuple<T...> tuple; System() { vector.push_back(new Position); vector.push_back(new Health); static_cast<Position*>(vector[0])->x = 34; } template <size_t i> decltype(std::get<i>(tuple)) component() { return static_cast<decltype(std::get<i>(tuple))>(*vector[i]); } };
Ça compile, tout va bien. Mon problème vient du fait que j'aimerais pouvoir modifier ce chiffre 34.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 System<Position,Health> system; std::cout<<system.component<0>().x; // affiche 34 en console
J'ai donc fait quelques modifications :
Mais mon compilateur refuse de coopérer, avec le message d'erreur du titre.. Je comprends pas son histoire de unrelated type, Component* et Position* sont related, c'est le polymorphisme tout ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 std::tuple<T*...> tuple; // au lieu de std::tuple<T...> tuple; return static_cast<decltype(std::get<i>(tuple))>(vector[i]); // au lieu de return static_cast<decltype(std::get<i>(tuple))>(*vector[i]); system.component<0>()->x++; // dans le main
Donc, question : qu'ai-je fait de mal ?
Partager