Bonjour,
J'ai 2 class "identique" et je souhaiterais pouvoir accéder à l'une ou l'autre via un pointer pour avoir un code générique
Dans l'idée, j'aurais voulu faire comme suit mais cela ne peut pas fonctionner (ou alors je n'ai pas trouvé comment) :
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
20 class Class1 { public : uint8_t Var1; uint8_t Var2[20]; void Class1(); bool Func1(); //fait une action a bool Func2(); //fait une action b } class Class2 { public : uint8_t Var1; uint8_t Var2[20]; void Class2(); bool Func1(); //fait une action c bool Func2(); //fait une action d }
Je me suis réorienté sur une class "contenaire" qui fait le job à la place :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Class1 test[0] = Class1(); Class2 test[1] = Class2();
Normalement j'aurais du déclaré "uint8_t *Var_global_1"; néanmoins j'ai peur ensuite de faire des erreurs en oubliant d'appeler "&Var_global_1" plutôt que "Var_global_1". En faite je pensais que je pouvais modifier la valeur de l'address, mais à priori cela bloque et je ne comprends pas vraiment pourquoi.
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 class Class_global() { public: uint8_t Var_global_1; uint8_t Var_global_2[20]; bool (Class1::*Func_global_1())(); void Class_global() { Class1 toto = Class1(); *Var_global_1 = &toto.Var1; //renvoit "invalid type argument of unary '*' (have 'uint8_t {aka unsigned char}')" *Var_global_2 = &toto.Var2; //warning: invalid conversion from 'uint8_t (*)[40] {aka unsigned char (*)[40]}' to 'uint8_t {aka unsigned char}' Func_global_1 = &toto.Func1; //renvoit "warning: ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say '&Class1::Func1' [-fpermissive]" } }
Je ne sais pas si je suis très clair
En pratique, n'importe quelle autre solution me convient, l'objectif est de pouvoir accéder de manière indifférencié à Class1 ou Class2 de manière générique, mais je sèche un peu.
Merci d'avance,
Partager