2011-05-24 13 views
23

मैं लंबे समय से सी ++ कर रहा हूं लेकिन मुझे आज सुबह एक प्रश्न का सामना करना पड़ा जिस पर मैं जवाब नहीं दे सका: "क्या सी ++ में नेमस्पेस के लिए उपनाम बनाना संभव है?"नेमस्पेस का नाम बदलना

मुझे एक उदाहरण दें। मान लीजिए कि मैं निम्नलिखित हैडर था करते हैं:

namespace old 
{ 
    class SomeClass {}; 
} 

कौन सा, अनिर्दिष्ट कारणों के लिए बनने के लिए था:

namespace _new 
{ 
    namespace nested 
    { 
    class SomeClass {}; // SomeClass hasn't changed 
    } 
} 

अब अगर मैं एक पुराने कोड स्थान है जहाँ, मैं जल्दी से कर सकते हैं SomeClass को संदर्भित करता है (और गंदे रूप में) जोड़कर "ठीक" परिवर्तन:

namespace old 
{ 
    typedef _new::nested::SomeClass SomeClass; 
} 

लेकिन वहाँ _new::nested से सब कुछ आयात करने के लिए एक रास्ता है मैं oldtypedef स्पष्ट रूप से हर प्रकार के बिना?

पाइथन import * from ... के समान कुछ।

धन्यवाद।

+8

'नया' नामस्थान नाम के लिए शायद एक बुरा उदाहरण है। ;) – Xeo

उत्तर

48
using namespace new::nested; 

Example at Ideone

या आप वास्तव में एक असली उर्फ ​​चाहते हैं:

namespace on = one::nested; 

Example at Ideone

+4

दूसरा व्यक्ति पहले की तुलना में काफी बेहतर है ... पहला व्यक्ति उपनाम नहीं बनाता है, बल्कि प्रतीकों को अन्य नामस्थान से लाता है और यह नाम संघर्ष या अवांछित परिणामों में समाप्त हो सकता है (यदि कोई फ़ंक्शन अधिभार 'नेस्टेड' नामस्थान में वर्तमान नामस्थान में अधिभार की तुलना में एक बेहतर मिलान है, यह अचानक अपने पिक को बदल देगा) –

+0

@ डेविड: हाँ, लेकिन ऐसा लगता है कि ओपी की समस्या है। :) – Xeo

28

यह:

namespace old = newns::nested; 

तुम क्या चाहते हो करने के लिए प्रतीत होता है।

संबंधित मुद्दे