2009-02-11 3 views
1

J'ai un petit espace de nom contenant quelques définitions de type, que j'utilise pour rendre mon code plus propre. Cependant je ne veux pas avoir à ajouter une ligne "using namespace ..." à chaque fichier qui utilise un de ces types, après tout je dois déjà ajouter un #include pour le fichier.Est-il acceptable d'ajouter un "namespace" immédiatement après la déclaration de l'espace de noms?


MonFichier.cpp:

#include "typedefs.h" 
void Bob() 
{ 
    IntList^ list = gcnew IntList; 
} 

typedefs.h:

namespace Typedefs 
{ 
    typedef List<int> IntList; 
    typedef array<int> IntArray; 
    typedef List<Byte> ByteList; 
    typedef array<Byte> ByteArray; 
    typedef List<String^> StringList; 
    typedef array<String^> StringArray; 
} 
using namespace Typedefs; 

Serait-il acceptable d'ajouter le « nous "espace de noms" directement après la déclaration d'espace de nom? Si non, pourquoi pas?

Répondre

2

Utilisez unnamednamespace.If vous voulez avoir les noms visibles uniquement aux fichiers que vous avez inclus les en-têtes

namespace { 
    int i = 10; 
} 

ci-dessus a le même effet que le code ci-dessous comme

namespace randomName { 
    int i = 10; 
} 
using randomName; 

si rien ne sera accessible depuis un autre fichier.

+0

Merci. J'ai regardé dans votre réponse et l'ai trouvé réitéré dans http://winterdom.com/dev/cpp/nspaces.html – demoncodemonkey

3

C'est possible mais je ne pense pas que ce soit sage. Il ne fait que défaire tout le but de l'espace de noms en exposant son contenu partout. Si vous voulez le confort de ne pas avoir à spécifier Typedefs:: ou using Typedefs::xxx; ou using namespace Typedefs; je ne créerais tout simplement pas un espace de noms.

0

Vous pourriez aussi bien définir vos nouveaux types en dehors de tout espace de nom, ou est-ce que je manque quelque chose?

1

Mettre un 'using namespace XXX;' directive dans un fichier d'en-tête est généralement considérée comme une mauvaise idée, car elle va à l'encontre de l'idée d'avoir un espace de noms en premier lieu. Cela peut facilement conduire au genre de conflits de noms que l'introduction d'un espace de noms est supposé éviter.

Mon conseil - ne le faites pas, si nécessaire, collez-les dans les fichiers source appropriés (.cpp) à la place.

Questions connexes