Est-il acceptable d'ajouter un « espace de noms à l'aide » immédiatement après la déclaration d'espace de nom?

StackOverflow https://stackoverflow.com/questions/536301

Question

J'ai un petit espace de noms contenant des définitions de type, que j'utilise pour faire mon propre look de code. Cependant, je ne veux pas avoir à ajouter un « espace de noms à l'aide ... » ligne pour chaque fichier qui utilise un de ces types, après tout ce que je l'ai déjà ajouter un #include pour le fichier.


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 la ligne « en utilisant l'espace de noms » immédiatement après la déclaration d'espace de nom? Sinon, pourquoi pas?

Était-ce utile?

La solution

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; 

donc rien ne sera accessible à partir de tout autre fichier.

Autres conseils

Il est possible, mais je ne pense pas qu'il soit sage. Il défaites seulement le but de l'espace de noms en exposant son contenu partout. Si vous voulez que le confort de ne pas avoir à spécifier Typedefs:: ou using Typedefs::xxx; ou using namespace Typedefs; je tout simplement pas créer un espace de nom du tout.

Mettre un 'espace de noms à l'aide XXX;' directive dans un fichier d'en-tête est généralement considéré comme une mauvaise idée, comme il le fait vaincre l'idée d'avoir un espace de noms en premier lieu. Il peut facilement conduire à ce genre de conflits de noms que l'introduction d'un espace de noms est censé éviter.

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

.

Vous pourriez aussi bien définir vos nouveaux types en dehors de tout espace de noms, ou suis-je manque quelque chose?

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