Bonjour,

J'ai une structure Component, et deux autres structures Position et Health :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
struct Component {};
struct Position : Component {int x;};
struct Health : Component {};
Et puis j'ai une structure System :

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]);
    }
};
Et dans mon main :

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
Ça compile, tout va bien. Mon problème vient du fait que j'aimerais pouvoir modifier ce chiffre 34.
J'ai donc fait quelques modifications :

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
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

Donc, question : qu'ai-je fait de mal ?