Uma das peculiaridades do meu sistema de desenvolvimento (Codegear C ++ Builder) é que alguns dos cabeçalhos gerados automaticamente insistem em ter ...
using namespace xyzzy
... declarações neles, que afetam meu código quando eu menos quero ou espero.
Existe uma maneira de cancelar / substituir de alguma forma uma declaração "usando" anterior para evitar isso.
Talvez...
unusing namespace xyzzy;
c++
namespaces
c++builder
Roddy
fonte
fonte
Respostas:
Não. Mas há uma solução potencial: se você colocar sua diretiva de inclusão em um namespace próprio, como este ...
namespace codegear { #include "codegear_header.h" } // namespace codegear
... então, os efeitos de qualquer uso de diretivas dentro desse cabeçalho são neutralizados.
Isso pode ser problemático em alguns casos. É por isso que todo guia de estilo C ++ recomenda fortemente não colocar uma diretiva "using namespace" em um arquivo de cabeçalho.
fonte
Não, você não pode cancelar o uso de um namespace. A única coisa que você pode fazer é colocar a
using namespace
instrução -um bloco para limitar seu escopo.Exemplo:
{ using namespace xyzzy; } // stop using namespace xyzzy here
Talvez você possa alterar o modelo que é usado para seus cabeçalhos gerados automaticamente.
fonte
Você pode ficar preso usando namespaces explícitos em conflitos:
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
fonte
Para referência futura: desde a versão XE, há um novo valor que você pode #define para evitar o temido
using namespace System;
no include: DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USEfonte
Que tal usar sed, perl ou alguma outra ferramenta de linha de comando como parte de seu processo de construção para modificar os cabeçalhos gerados depois que eles são gerados, mas antes de serem usados?
fonte
Um experimento rápido com o Visual Studio 2005 mostra que você pode incluir esses cabeçalhos em seu próprio namespace nomeado e, em seguida, o
use
que você precisa desse namespace (mas nãouse
o namespace inteiro, pois ele apresentará o namespace que você deseja ocultar.fonte
#include<iostream> #include<stdio.h> namespace namespace1 { int t = 10; } namespace namespace2 { int t = 20; } int main() { using namespace namespace1; printf("%d" , t); printf("%d" , namespace2::t); }
fonte