2017-08-18 15 views
5

İçe aktarılan sembolleri ad alanının gövdesi (veya gövdeleri) dışında görünmeyen, using namespace benzeri bir yapı var mı? Burada bu örnekte C++ harici olarak erişilemeden diğer ad alanından semboller kullanın

, whatever ve other_namespace her sembol de Foo::<name_of_symbol> erişilebilir olacak ... ve ben bunu engellemek için bir yol istiyorum.

namespace Foo { 
    using namespace whatever; 
    using namespace other_namespace; 
    // some definitions 
} 

tam bir örnek olarak, bu program geçerlidir. Eğer amaçlanan semantiklerle birlikte using namespace'a bir alternatif mevcutsa ve kullanılsaydı, bu olmazdı.

namespace a { 
    int func(int x) { 
    return 10; 
    } 
} 

namespace b { 
    using namespace a; 
} 

namespace c { 
    int do_thing(int x) { 
    return b::func(57); 
    } 
} 
+0

İşlev-kapsamlı 'using' bildirimleri? – Sneftel

+0

@Sneftel Her işlev aynı ad alanı kümesini kullandığında, sonra da yinelenen –

+1

olduğunu fark ettim. Ayrıca - 'namespace' yönergesini kullanarak bir .cpp dosyasına veya özel .h dosyasına Bu kod tüketmek için görünür değil. –

cevap

5

İsimsiz bir ad alanının içindeki bir takma ad kullanabilirsiniz.

namespace a_long_namespace_name { 
    void someFunc() {}; 
} 

namespace b { 
    namespace { // an unnamed namespace 
     namespace a = a_long_namespace_name; // create a short alias 
    } 

    void someOtherFunc() { 
     a::someFunc(); 
    } 
} 

b::a::someFunc(); // compiler error 

Yine de bir işlevi çağırmak için ad alanını yazmanız gerekir, ancak aramaları daha kısa yapar.

İlgili konular