J'ai actuellement un soft qui me permet d'utiliser du hardware, et d'échanger des information avec.
Jusque là, au démarrage, une structure de config était créée puis utilisé dans le soft pour configurer la board.
Pour cela, cette structure de config doit être accessible dans tout le projet, ainsi, elle est accessible un peut partout avec des extern:
extern MaConfig Config
puis elle est instanciée dans le fichier config.cpp.
Aujourd'hui, les besoins du projet m'amènent à avoir deux structures de config différentes. Ainsi, j'aimerais être capable, au démarrage, de pouvoir choisir entre les deux tout en ayant accès à cette structure dans tout le projet tout en gardant son nom actuel => "Config". en d'autre mot, je veux pouvoir choisir/modifier le type de ma structure config durant le run time.
Dans la mesure ou un extern n'est pas modifiable durant le run time, je ne vois pas comment faire.
J'ai pensé au template, à de l'héritage ou que sait-je, mais je ne trouve pas de solution.
Si l'interface de ton type est la même, un pointeur sur la structure en question et deux dérivations différentes est OK. Si l'interface est différente, c'est pas trop possible.
Edit : Mes deux structure de config contiennent toute les deux des sous structures ayant le même nom, mais chacune de ces sous structure sont plutôt différente dans leur contenue.
extern GenericConfig * Config ;
// et puis ailleurs :
Config = &some_concrete_config ;
Cependant :
adrien050356 a écrit:
Edit : Mes deux structure contiennent toute les deux des sous structures ayant le même nom, mais chacune de ces sous structure sont plutôt différente dans leur contenue.
Alors non, si les sous structures sont différentes, ce n'est pas le même type. C'est pour ça que dans ce genre de cas, on préfère définir des fonctions d'accès aux infos intéressantes, définies par une interface. Interface pouvant être implémentées de manières différentes.
Ok, je crois que je comprends. Dans la mesure ou les sous champs sont pas les même, ça va chercher à remplir des variables qui n'existent pas !? donc ça ne peut pas marcher.
Non, quand tu assignes une adresse à un pointeur, ça ne fait que placer l'adresse de l'élément dans le pointeur. Rien de plus. Ici, le problème est que le type n'est pas le même. Peu importe que les sous-structures aient le même nom.
Si je fais :
? v = Config->Champ1 ;
Et que Champ1 peut être soit de type "struct X" soit de type "struct Y", je donne quoi comme type à v ?
Bien longtemps que je ne fais plus de c++, je pense que je dis du caca mais "auto" ça ne marcherai pas ?
Auto c'est quelque chose qui doit être déterminé statiquement. Si tu peux avoir des types différents (mais tu ne peux pas puisque le typage t'empêchera avant) auto ne pourrait juste pas répondre.
Bien longtemps que je ne fais plus de c++, je pense que je dis du caca mais "auto" ça ne marcherai pas ?
Auto c'est quelque chose qui doit être déterminé statiquement. Si tu peux avoir des types différents (mais tu ne peux pas puisque le typage t'empêchera avant) auto ne pourrait juste pas répondre.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C