Partage
  • Partager sur Facebook
  • Partager sur Twitter

initialisation static const member argument

17 avril 2019 à 14:24:26

Bonjour,

J'ai un problème avec le code suivant :

class Definition
{
private :
    static const BOOL IsVersion1 = true;

public :  
    Definition();
    ~Definition();

    static const ULONG TX_BUFFER_MAX = IsVersion1 ? Definitionv1::TX_BUFFER_MAX : DefinitionQuest::TX_BUFFER_MAX;

};


Pour l'instant ceci compile et fonctionne. Mais jusque la javais laissé "IsVersion1" à "true" pour terminer ma class (qui est bien plus grand que ce que j'ai mis là, mais le reste n'est pas important pour mon problème). Sauf que maintenant, j'aimerais pouvoir faire la chose suivant :

static const BOOL IsVersion1 = Config.Version1;

 Où "Config.Version1" est la variable de la structure "Config" et qui m'indique si j'utilise ou non la Version1 du Hardware utilisé par le soft.

Mais c'est là que le code ne compile plus. Car "TX_BUFFER_MAX" à besoin que "IsVersion1" soit une valeur constante.

TX_BUFFER_MAX est notamment utilisé pour initialisé la taille d'un tableau. je suis donc obligé de la déclarer comme constante.

Tout ceci n'est pas optimal du tout, mais je ne peux actuellement pas changer le code.

Auriez vous une solution pour contourner ce problème ?

-
Edité par adrien050356 17 avril 2019 à 14:28:16

  • Partager sur Facebook
  • Partager sur Twitter
18 avril 2019 à 15:19:25

Si c'est des constantes à la compilation, utilisez le mot clé constexpr :

https://en.cppreference.com/w/cpp/language/constexpr

-
Edité par bacelar 18 avril 2019 à 15:19:45

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
18 avril 2019 à 16:31:46

Si Config.Version1 n'est pas connu à la compilation alors TX_BUFFER_MAX ne peut pas être constexpr (juste constant) et ton tableau doit être dynamique, donc std::vector. :)

-
Edité par Maluna34 18 avril 2019 à 16:32:40

  • Partager sur Facebook
  • Partager sur Twitter
19 avril 2019 à 12:53:39

J'avais pensé au tableau dynamique. Cependant, j'ai plusieurs tableau comme ça et l'utilisation d'un tableau dynamique n'étant pas explicitement justifié ça rendrait le projet d'autant plus incompréhensible. le code source fais dans les 60 000 lignes.

Mais si il y a pas d'autres solution, j'y penserais plus sérieusement en effet :)

  • Partager sur Facebook
  • Partager sur Twitter
19 avril 2019 à 14:13:11

>l'utilisation d'un tableau dynamique

Il n'y a rien de "dynamique" au compile time.

Alors c'est du compile time et le dynamisme est une errance de votre esprit, soit il est justifié et c'est le compile time qui est une errance.

Si c'est le deuxième cas de figure, on se dirige directement sur le "fiasco de l'initialisation des variables globales/statiques", Google est notre ami car vous ne serez pas le premier à vous prendre les pieds dans ce tapis.

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.