Voilà je m'attaque à un petit projet et je me demandais qu'elle est la/votre meilleur manière d'inclure des variables.
Un genre de constantes.h du TP sokoban du cours C sauf avec des variables.
Un fichier contenant (par exemple) des variables TAILLE_BLOC mais pas en define ni en constante, (qu'on puisse les modifier et donc l'utilisateur à sa guise changer la taille de ce qui est affiché.
Pour l'instant je fais un #include dans le main, mais bien évidement mes variables sont donc pas globales (ca serait pratique) et surout ca fait bourrin (à mon goût).
En vrai, que l'on mette les variables dans une structure, dans une classe, dans un namespace ou n'importe où, ça reste des variables globales.
On peut souvent s'en tirer avec des singletons (un peu plus beau que les globales), ou en revoyant son architecture de classes pour utiliser au mieux les design patterns existants.
Ce qui peut se faire par exemple est de créer une classe "Gestionnairee de constantes" (par exemple Singleton) dont tu crées un seul objet global au départ de ton appication.
Puis, pour accéder à une constante, tu n'auras qu'à demander à la classe de t'en fournir la valeur.
Tu peux par exemple de cette manière charger les constantes depuis un fichier ou changer leur valeur en cours de route via la classe.
Désolé je suis plutot débutant donc j'ai un peu de mal à comprendre.
Qu'est ce que sont les singletons ? j'ai un peu cherché sur wikipedia mais ca ma plus embrouillé.
Si je résume c'est une classe avec accesseur etc.., à n'inclure qu'une seule fois (et vérifier qu'elle n'est pas instanciée une nouvelle fois), c'est ca ?
Par contre :
Citation : ornithorynx
On peut souvent s'en tirer avec des singletons (un peu plus beau que les globales), ou en revoyant son architecture de classes pour utiliser au mieux les design patterns existants.
Je m'excuse mais je croit que je n'ai pas (encore) le niveau pour comprendre/traduire.
Les design patterns (dont le singleton fait partie), c'est une manière de définir ta classe selon un modèle préexistant (pattern = modèle).
Le singleton, c'est un design pattern qui permet à une classe de n'avoir qu'une et une seule instance d'elle-même, accessible de partout (par exemple MaClasseSingleton::instance() ).
tu devrais faire des recherches sur les varaible static a mon avis c'est ta solution : tu les encapsule dans une calsse et tu n'inclue cette classe que dans les endroits ou t'en a besoin.
tu devrais faire des recherches sur les varaible static a mon avis c'est ta solution : tu les encapsule dans une calsse et tu n'inclue cette classe que dans les endroits ou t'en a besoin.
Quelle différence entre ça, un namespace ou des globales ?
Tes variables globales sont de portée globale. C'est pas une super idée car tu risques d'avoir des conflits de nom si quelqu'un a eu l'idée de nommer sa variable comme la tienne.
Tes variables dans un namespace sont de portée le namespace, mais si tu veux tu peux t'en servir ailleurs avec nomdunamespace::nomdelavariable, ou tu peux utiliser using pour les utiliser directement, c'est une très bonne idée.
si tu mets tout en static dans une classe tu peux hériter, faire des statics private avec un accès par accesseurs, et ajouter des méthodes. Je ne sais pas si c'est utile pour toi.
Ok, merci à tous j'ai finit par comprendre comment utiliser le Singleton.
Par contre si je puis faire une suggestion au rédacteur du tuto, préciser pour les débutants (moi) que :
- Si on veut séparer en header/.cpp, il ne faut pas mettre que le prototype des fonctions static dans le .h, mais la fonction en entier (ici c'est getInstance / kill je croit)
- De même que
Citation : Pas de titre
CSingleton *CSingleton::singleton = 0;
est alors à insérer dans le fichier .cpp associé
C'était pas évident pour moi.
Merci à tous.
Meilleur manière d'inclure des variables ?
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
* Un wrapper C++ pour sqlite * Une alternative a boost units
* Un wrapper C++ pour sqlite * Une alternative a boost units
* Un wrapper C++ pour sqlite * Une alternative a boost units