2014-07-11 3 views
1

J'ai des variables que je veux accessibles à toutes mes applications. Est-ce une mauvaise pratique? Si oui, pourquoi?Espace de noms pour les variables globales

namespace Global 
{ 
    SDL_Window* window; 
    SDL_Renderer* renderer; 
    UI* new_view; 
} 

Une autre suggestion:

Que diriez-vous passer un pointeur sur les variables globales à des classes dans le constructeur et le garder comme une variable locale?

class A 
{ 
    SDL_Renderer* m_renderer; 

    A(SDL_Renderer* renderer); 
} 

A::A(SDL_Renderer* renderer) 
{ 
    m_renderer = renderer; 
} 
+1

pourquoi ne pas passer les variables _explicitly_ aux fonctions ou quelle classe utilise ces variables? –

+0

C'est ce que j'ai fait jusqu'à présent, mais cela conduit à des fonctions ayant plus de 9 arguments. J'ai ajouté une autre suggestion dans ma question. – user3720733

+0

si vous passez toujours tous les trois, alors vous pouvez définir une 'struct' qui comprend les trois comme membres, et passer seulement une struct –

Répondre

2

Est-ce une mauvaise pratique?

Oui, c'est une mauvaise pratique d'utiliser des variables globales, qu'elles soient placées dans un espace de noms distinct ou non.

Si oui, pourquoi?

Il introduit des dépendances inutiles parmi les modules d'un système. Conservez les données et le comportement localisés dans les classes, qui sont responsables de faire des choses spécifiques.
Il y a de rares cas où les singletons ont un sens, mais alors ils ne sont pas censés être simplement des variables globales, mais ont une fonction de membre statique (ou libre) pour y accéder.

0

Oui, c'est mauvais.
Bonne partie: Vous avez travaillé autour de la première raison de la méchanceté (encombrer l'espace de noms global),
mais ne nommez pas votre propre espace de nommage "Global". Choisissez quelque chose de plus unique.
Bad partie: Il y a plus de choses, comme la création de dépendances indésirables
(comme partie du programme Un travail ne le ferai pas si la partie B modifier les valeurs Indifférent Fume)