सी ++ में "नेमस्पेस उपनाम" क्या है? इसका उपयोग कैसे किया जा सकता है?सी ++ में, "नेमस्पेस उपनाम" क्या है?
उत्तर
एक नामस्थान उपनाम एक अलग, छोटे नाम से लंबे नामस्थान नाम का जिक्र करने का एक सुविधाजनक तरीका है।
उदाहरण के तौर पर, आप कहते हैं कि आप using namespace
निर्देश के बिना बूस्ट के यूब्लास से संख्यात्मक वैक्टर का उपयोग करना चाहते हैं। पूर्ण नाम स्थान बताते हुए हर बार बोझिल है:
boost::numeric::ublas::vector<double> v;
इसके बजाय, आप boost::numeric::ublas
के लिए उपनाम परिभाषित कर सकते हैं - कहते हैं कि हम सिर्फ ublas
को यह संक्षिप्त करना चाहते हैं: काफी बस
namespace ublas = boost::numeric::ublas;
ublas::vector<double> v;
, #define काम नहीं करेगा
namespace Mine { class MyClass { public: int i; }; }
namespace His = Mine;
namespace Yours { class Mine: public His::MyClass { void f() { i = 1; } }; }
ठीक संकलित करता है। आपको नेमस्पेस/क्लास नाम टकराव के आसपास काम करने देता है।
namespace Nope { class Oops { public: int j; }; }
#define Hmm Nope
namespace Drat { class Nope: public Hmm::Oops { void f() { j = 1; } }; }
अंतिम पंक्ति पर, "हम्म: ओप्स" एक संकलित त्रुटि है। प्री-प्रोसेसर इसे नोप :: ओप्स में बदल देता है, लेकिन नोप पहले से ही एक क्लास नाम है। इस विषय पर
यह सब जैसे एक looong नाम स्थान नाम के लिए एक उपनाम चुनने, के बारे में है:
namespace SHORT = NamespaceFirst::NameSpaceNested::Meow
फिर बाद में, आप typedef कर सकते हैं
typedef SHORT::mytype
typedef NamespaceFirst::NameSpaceNested::Meow::mytype
इस वाक्य रचना केवल नामस्थान के लिए काम करता है, कक्षाएं शामिल नहीं कर सकते, namespace NAME =
के बाद प्रकार भी ध्यान रखें कि नाम स्थान उपनाम और निर्देशों का उपयोग कर, संकलन समय पर हल कर रहे हैं समय नहीं चला। (अधिक विशेष रूप से, वे दोनों उपकरण हैं जो संकलक को बताने के लिए उपयोग किए जाते हैं, जहां नामों को हल करते समय देखना है, अगर यह वर्तमान दायरे या उसके किसी भी मूल स्कॉप्स में कोई विशेष प्रतीक नहीं मिल पाता है।) उदाहरण के लिए, इनमें से कोई भी नहीं होगा संकलन:
namespace A {
int foo;
namespace AA {
int bar;
} // namespace AA
namespace AB {
int bar;
} // namespace AB
} // namespace A
namespace B {
int foo;
namespace BA {
int bar;
} // namespace BA
namespace BB {
int bar;
} // namespace BB
} // namespace B
bool nsChooser1, nsChooser2;
// ...
// This doesn't work.
namespace C = (nsChooser1 ? A : B);
C::foo = 3;
// Neither does this.
// (Nor would it be advisable even if it does work, as compound if-else blocks without braces are easy to inadvertently break.)
if (nsChooser1)
if (nsChooser2)
using namespace A::AA;
else
using namespace A::AB;
else
if (nsChooser2)
using namespace B::BA;
else
using namespace B::BB;
अब, एक जिज्ञासु मन ध्यान दिया होगा कि constexpr
चर भी संकलन समय पर उपयोग किया जाता है, और आश्चर्य है कि क्या वे या तो एक उपनाम या एक निर्देश के साथ संयोजन के रूप में इस्तेमाल किया जा सकता। मेरे ज्ञान के लिए, वे नहीं कर सकते, हालांकि मैं इसके बारे में गलत हो सकता हूं। यदि आपको अलग-अलग नामस्थानों में समान रूप से नामित चर के साथ काम करने की आवश्यकता है, और गतिशील रूप से उनके बीच चयन करें, तो आपको संदर्भ या पॉइंटर्स का उपयोग करना होगा।
// Using the above namespaces...
int& foo = (nsChooser1 ? A::foo : B::foo);
int* bar;
if (nsChooser1) {
if (nsChooser2) {
bar = &A::AA::bar;
} else {
bar = &A::AB::bar;
}
} else {
if (nsChooser2) {
bar = &B::BA::bar;
} else {
bar = &B::BB::bar;
}
}
उपरोक्त की उपयोगिता सीमित हो सकती है, लेकिन इसे उद्देश्य प्रदान करना चाहिए।
(उपर्युक्त में किसी भी टाइपो के लिए मेरी माफी माँग सकती है।)
- 1. सी ++ में नेमस्पेस उपनाम का दायरा क्या है?
- 2. सी # कक्षा में @ नेमस्पेस फ़ील्ड क्या है?
- 3. app.config में .NET नेमस्पेस को उपनाम करना संभव है?
- 4. नेमस्पेस, उपनाम और विजुअल स्टूडियो फॉर्म डिज़ाइनर
- 5. सी # नामस्थान उपनाम - बिंदु क्या है?
- 6. नेमस्पेस का उपयोग कैसे करें या उपनाम/संक्षेप टाइप करें?
- 7. एक्सएसडी नेमस्पेस से सी # नेमस्पेस
- 8. क्या उपनाम के बराबर किसी अन्य नामस्थान के अंदर 'नेमस्पेस का उपयोग करना' है?
- 9. WindowsFormsApplicationBase सी # नेमस्पेस में मौजूद नहीं है?
- 10. सी ++ नेमस्पेस
- 11. सी ++ में, नेमस्पेस के लिए क्या उपयोग किया जाता है?
- 12. सी # में उपनाम का उपयोग कर पूरे नेमस्पेस बनाम आयात करने के बीच प्रदर्शन?
- 13. एफ # में नेमस्पेस एलियासिंग?
- 14. क्या jQuery में नेमस्पेस बनाना संभव है?
- 15. क्या PHPNOMPath में रजिस्टर नेमस्पेस आवश्यक है?
- 16. क्या सी # नामस्थान उपनाम को उलटा करना संभव है?
- 17. सी ++: नेमस्पेस और #include
- 18. सी ++ नेमस्पेस फ़ंक्शंस
- 19. सी ++ नेमस्पेस और टेम्पलेट
- 20. एक्सएमएल क्रमबद्धता + नेमस्पेस (सी #)
- 21. सी # नेमस्पेस web.config
- 22. सी # नेमस्पेस विभाजक (।) कहीं परिभाषित है?
- 23. सी ++ टेम्पलेट के लिए उपनाम?
- 24. सी # में, System.Int32 के लिए "int" उपनाम क्यों है?
- 25. क्या मैं उपनाम
- 26. स्टेटमेंट से हटाए गए उपनाम में उपनाम
- 27. नेमस्पेस ऑपरेटर ... बड़ा सौदा क्या है?
- 28. नामस्थान सी # में सामान्य प्रकार के लिए उपनाम scoped
- 29. क्या डीओटी भाषा समर्थन चर/उपनाम है?
- 30. 'अज्ञात नेमस्पेस' (सी ++) में डेटा डिबगिंग
संभावित रूप से डाउनवॉट्स को समझाने के लिए, एसओ एक अच्छी सी ++ पाठ्यपुस्तक के लिए प्रतिस्थापन नहीं होगा और कभी भी प्रतिस्थापन नहीं होगा। आपके द्वारा उठाए गए प्रश्न का उत्तर ऐसी किसी भी पुस्तक द्वारा दिया जाएगा। और आपके स्वयं के प्रश्नों का उत्तर देने के लिए "सुविधा" का उपयोग ऐसी पुस्तकों के पैराफ्रेश प्रदान करने के लिए नहीं किया जाना चाहिए। –
कोई अपराध नहीं लिया गया ... बस यह बताने के लिए कि मैंने ऐसा क्यों किया: यह पॉडकास्ट में जोएल की टिप्पणियों से मेरी समझ थी कि एसओ पर भी "प्रवेश स्तर" प्रश्न उचित खेल थे, और यह एक प्रश्न और उत्तर पूछने के लिए स्वीकार्य था यह स्वयं है अगर वह सामग्री SO पर अभी तक एक सुलभ रूप में नहीं थी। लेकिन जाहिर है, यह फहरा हुआ है? –
जलन से बचने के लिए निश्चित रूप से अपने प्रश्न का उत्तर देने के लिए एक शिष्टाचार है; इस मामले में, यह बहुत स्पष्ट है कि यह कभी ** ** असली सवाल नहीं था। उदाहरण के लिए, http://stackoverflow.com/questions/494927/stack-overflow-etiquette-for-answering-your-own-question –