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