Bonjour,
J'aimerai avoir vos avis et vos conseils au sujet de la méthode pour réaliser un gestionnaire (ou manager) de constantes (mais aussi de variables, ça change pas grand chose) pour mes projets C++.
Le but d'un manager de ce type est tout simplement de centraliser toutes les "valeurs fixes" que l'on pourrait trouver éparpillées dans le code. Pour ma part, mes projets étant généralement des jeux, il pourrait s'agir de variables/constantes genre "vitesse_vaisseau", "dommages_pistolet", etc...
Ca fait plusieurs fois que j'essaye de réaliser quelque chose de la sorte, mais je ne trouve pas de solution qui me convienne réellement. J'ai eu beau chercher avant sur le net, je n'ai pas trouvé de solution satisfaisante.
Alors voila, pour ma part, 2 solutions me viennent à l'esprit, mais j'imagine qu'il y a sans doute bcp d'autres qui sont bien mieux, et j'aimerai justement votre avis à ce sujet.
Solution 1 :
Déclarer carrément des variables ou constantes dans un header, comme des variables classiques (oui c'est moche ^^)...
Avantages :
- pas d'espace mémoire perdu
- pas de pertes de perf à l'exécution
Désavantages :
- c'est moche ^^
- dès que je veux rajouter une variable, je dois recompiler TOUT les cpp qui utilise une des variables, ce qui est très chiant.
- pas du tout dynamique : vu que les noms des variables ne sont pas des string, je ne peux pas charger leurs valeurs depuis un fichier de config à l'exécution par exemple.
Solution 2 :
Utiliser une std::map pour lier un string (nom de la variable) avec sa valeur. Les variables de "valeur" serait une union entre les différents types de données que je veux pouvoir enregistrer.
Avantages :
- ça me parait être une solution "élégante"
- c'est dynamique : je peux accéder/ajouter/modifier des variables à l'exécution
Désavantages :
- Perte d'espace mémoire dû à la présence de l'union, surtout si l'on veut stocker des choses comme des vecteurs de 3 floats...
- Il faut connaître le type de la donnée pour accéder à sa valeur.
- J'ai peur que au niveau performance, une std::map ça soit pas top, car devoir accéder des dizaines et dizaines de fois par frame à une std::map...
Mes inquiétudes sur les perf et perte d'espace mémoire de la solution 2 sont surtout du au fait que je travaille actuellement sur plateforme portable (nintendo ds), et que j'aimerai une solution qui ne surcharge pas trop le processeur rikiki de la bestiole, ainsi que sa RAM ridicule.
Merci d'avance pour votre aide, vos avis / remarques / conseils / insultes ^^
Yagero
Partager