2016-05-27 14 views
1

Angenommen, ich den folgenden CodeMag einen von mehreren Erklärungen mit demselben Namen

namespace A { 
    int foo(); 
} 
namespace B { 
    void foo(); 
} 
using namespace A; 
using namespace B; 


int x = foo(); // error 

und ich finde A::foo wirklich nützlich, aber ist nicht so in B::foo. Was kann ich tun, damit A::foo bei nachfolgenden uneingeschränkten Verweisen auf foo bevorzugt wird? Z.B. (was in Wirklichkeit keine Wirkung hat) oder unusing B::foo.

+0

Sie haben Namespace A und B und Sie möchten A :: foo dann bevorzugen, was Sie tun müssen, ist sowohl die Verwendung von Namespace-Anweisungen und dann in der Funktion, wo Sie bevorzugen A :: foo verwenden 'mit A :: foo 'und dann ruft' foo() 'ergibt foo Funktion von A – Deepanshu

+0

Das ist keine gute Antwort - Siehe SergeyA Antwort unten - so ist es ein Kommentar. Sie können (und sollten) den Namespace explizit angeben: 'int x = A :: foo();' Dies macht die vollständige Verwendung von 'namespace' überflüssig. – user4581301

Antwort

2

Der ganze Sinn eines Namensraums besteht darin, Namen zu isolieren. Durch using den ganzen Namespace trotzen Sie genau diesen Grund.

Lösung für Ihr Problem ist using namespace ein für allemal zu stoppen, und nie zu dieser beklagenswerten Taktik zurückzukehren.

+0

Oder tun Sie es in begrenzten Bereichen, d. H. 'Int main() {mit Namespace A; ...} ' –

+0

@sleeptightpupper, ich bin noch keinen Grund zu sehen, den gesamten Namespace zu verwenden, auch in eng genug Umfang. – SergeyA

+0

Aber mach es intelligent in begrenzten Bereichen. 'int main() {mit Namespace A; Verwenden des Namensraums A; int x = foo(); } 'lässt OP nicht besser dran. Solange Sie nicht wissen, was Sie tun, und die Verwendung von Namespace rechtfertigen können, tun Sie es nicht. – user4581301