Question

Je pense que la plupart des programmeurs C ++ sont d'accord pour dire que polluer l'espace de noms global est une mauvaise idée, mais y a-t-il des moments où cette règle peut être ignorée?

Par exemple, j'ai un type à utiliser dans une application particulière. Devrais-je le définir ainsi:

mytypes.h

typedef int MY_TYPE;

foo.cpp

MY_TYPE myType;

Ou utilisez un espace de noms:

mytypes.h

namespace ns {
typedef int MY_TYPE;
}

foo.cpp

ns::MY_TYPE myType;
...
using namespace ns;
MY_TYPE myType;

Lequel préférez-vous? Y a-t-il des moments où il est acceptable d'utiliser la première méthode?

Était-ce utile?

La solution

J'utilise des espaces de noms pour partitionner le code de bibliothèque à partir d'un code spécifique à une application et, dans un grand projet, pour partitionner les divers modules composant le projet.

L'espace de noms global est donc utile pour les types et les fonctions spécifiques à l'application utilisés dans plusieurs modules de l'application.

Ainsi, si votre MY_TYPE est utilisé dans l'ensemble de votre application, insérez-le dans l'espace-noms global, sinon mettez-le dans un espace-noms nommé.

Autres conseils

Vous pouvez définir votre type dans un espace de nom distinct et utiliser

using ns::MY_TYPE;

Les bibliothèques ne doivent pas, les applications peuvent.

Lorsque plusieurs personnes travaillent sur une application, vous avez bien sûr besoin de règles claires. La règle la plus claire est "ne pas". Cependant, ce n’est pas idéal dans tous les cas.

" en utilisant " les instructions ne doivent figurer que sur les fichiers CPP, jamais dans les en-têtes, ce qui complique la rédaction de modèles car, pour la plupart des compilateurs dans un avenir proche, ils doivent résider dans les en-têtes.

D'après mon expérience (principalement une petite équipe avec un projet volumineux mais bien partitionné), la pollution des espaces de noms ne pose pas vraiment problème, tant que vous contrôlez le code respectif et insistez sur les noms descriptifs. Les cas dont je me souviens étaient rares et faciles à traiter. Cependant, les bibliothèques tierces posaient de gros problèmes - même avec les sources disponibles.

YMMV avec une énorme équipe ou un énorme projet qui entre dans une seule compilation.

Je ne suis pas du tout d'accord avec l'utilisation de l'espace de noms global (enfin, sauf pour main , bien sûr). Pour les éléments utilisés dans l'ensemble de l'application, vous pouvez simplement utiliser en utilisant l'espace de noms en haut de vos fichiers .cpp , après tous les éléments #include lignes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top