Changement de pointer d'une variable et de fonctions
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
Code:
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
} |
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:
1 2 3
|
Class1 test[0] = Class1();
Class2 test[1] = Class2(); |
Je me suis réorienté sur une class "contenaire" qui fait le job à la place :
Code:
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]"
}
} |
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.
Je ne sais pas si je suis très clair :D
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,