Partage
  • Partager sur Facebook
  • Partager sur Twitter

choisir une structure au run time

13 mars 2019 à 15:28:55

Bonjour,

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.

-
Edité par adrien050356 13 mars 2019 à 15:31:10

  • Partager sur Facebook
  • Partager sur Twitter
13 mars 2019 à 15:47:09

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.

  • Partager sur Facebook
  • Partager sur Twitter

Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

13 mars 2019 à 15:50:17

Excuse moi, j'ai pas tout compris.

tu parle d'utiliser un pointeur de pointeur ?

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.

-
Edité par adrien050356 13 mars 2019 à 16:09:17

  • Partager sur Facebook
  • Partager sur Twitter
13 mars 2019 à 16:08:24

adrien050356 a écrit:

tu parle d'utiliser un pointeur de pointeur ?

Non, j'aurais dit un pointeur simple :

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.

  • Partager sur Facebook
  • Partager sur Twitter

Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

13 mars 2019 à 16:33:59

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.

Car j'imagine que faire

Config = &some_concrete_config 

Ca revient à faire

Config->Champ1 = some_concrete_config->champ1

Pour tout les champs ?


-
Edité par adrien050356 13 mars 2019 à 16:36:03

  • Partager sur Facebook
  • Partager sur Twitter
13 mars 2019 à 16:45:06

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 ?

  • Partager sur Facebook
  • Partager sur Twitter

Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

13 mars 2019 à 16:48:16

Ksass`Peuk a écrit:

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 ?
  • Partager sur Facebook
  • Partager sur Twitter
13 mars 2019 à 16:52:56

Dac, je viens de saisir. Donc en effet c'est pas possible pour mon cas.

J'avais autre chose à faire que modifier tout le projet, mais je vais devoir réfléchir pour le remanier un minimum.

Je te remercie pour tes réponses !

-
Edité par adrien050356 13 mars 2019 à 16:53:11

  • Partager sur Facebook
  • Partager sur Twitter
13 mars 2019 à 17:02:49

Didy7 a écrit:

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.

  • Partager sur Facebook
  • Partager sur Twitter

Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

14 mars 2019 à 13:56:39

Quitte à corriger la conception du programme, dégagez fissa cette variable globale qu'on ne saurait voir.
  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
18 mars 2019 à 10:13:33

Ksass`Peuk a écrit:

Didy7 a écrit:

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.



Top merci pour l'explication ;)
  • Partager sur Facebook
  • Partager sur Twitter