77 votes

Comment puis-je "désutiliser" un espace de noms ?

L'un des aléas de mon système de développement (Codegear C++Builder) est que certains des en-têtes auto-générés insistent pour avoir...

using namespace xyzzy

...qui ont un impact sur mon code au moment où je m'y attends le moins.

Existe-t-il un moyen d'annuler une déclaration "using" antérieure pour éviter ce problème ?

Peut-être...

unusing namespace xyzzy;

57voto

Head Geek Points 10874

Nope. Mais il existe une solution potentielle : si vous enfermez votre directive include dans un espace de noms qui lui est propre, comme ceci...

namespace codegear {
    #include "codegear_header.h"
} // namespace codegear

...les effets de toutes les directives d'utilisation contenues dans cet en-tête sont alors neutralisés.

Cela peut être problématique dans certains cas. C'est la raison pour laquelle tous les guides de style C++ recommandent fortement pas l'insertion d'une directive "using namespace" dans un fichier d'en-tête.

47voto

jk. Points 4421

Non, vous ne pouvez pas inutilisation un espace de noms. La seule chose que vous pouvez faire est de mettre le using namespace -un bloc pour en limiter la portée.

Exemple :

{
    using namespace xyzzy;

} // stop using namespace xyzzy here

Vous pouvez peut-être modifier le modèle utilisé pour les en-têtes générés automatiquement.

15voto

Eclipse Points 27662

Il se peut que vous soyez obligé d'utiliser des espaces de noms explicites pour les conflits :

string x; // Doesn't work due to conflicting declarations
::string y; // use the class from the global namespace
std::string z; // use the string class from the std namespace

10voto

cdelacroix Points 618

Pour référence future : depuis la version XE, il y a une nouvelle valeur que vous pouvez #define pour éviter le redouté using namespace System; int l'inclure : DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE

7voto

Arkadiy Points 10567

Pourquoi ne pas utiliser sed, perl ou un autre outil de ligne de commande dans le cadre de votre processus de construction pour modifier les en-têtes générés après qu'ils aient été générés mais avant qu'ils ne soient utilisés ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X