हां, C++ में नेमस्पेस नेस्टेड हो सकते हैं। हम एक नेमस्पेस को दूसरे नेमस्पेस के अंदर परिभाषित कर सकते हैं जैसा कि नीचे दिखाया गया है:
सिंटैक्स
namespace namespace_name1 {
// कोड डिक्लेरेशन्स
namespace namespace_name2 {
// कोड डिक्लेरेशन्स
}
}
आप रिज़ॉल्यूशन ऑपरेटर्स का उपयोग करके नेस्टेड नेमस्पेस के मेंबर्स को एक्सेस कर सकते हैं:
// namespace_name2 के मेंबर्स एक्सेस करने के लिए
using namespace namespace_name1::namespace_name2;
// namespace_name1 के मेंबर्स एक्सेस करने के लिए
using namespace namespace_name1;
उदाहरण
#include <iostream>
using namespace std;
// पहला नेमस्पेस
namespace first_space {
void func() {
cout << "first_space के अंदर" << endl;
}
// दूसरा नेमस्पेस (नेस्टेड)
namespace second_space {
void func() {
cout << "second_space के अंदर" << endl;
}
}
}
using namespace first_space::second_space;
int main() {
// यह second_space से फ़ंक्शन कॉल करता है
func();
return 0;
}
आउटपुट
second_space के अंदर
नेस्टेड नेमस्पेस के उन्नत उपयोग
बाहरी नेमस्पेस से एक्सेस
namespace outer {
int x = 10;
namespace inner {
void print() {
cout << "x = " << x << endl; // बाहरी नेमस्पेस का x एक्सेसिबल है
}
}
}
पूरी तरह से क्वालिफाइड नाम
int main() {
first_space::func(); // "first_space के अंदर"
first_space::second_space::func(); // "second_space के अंदर"
return 0;
}
नेमस्पेस एलियास
namespace fs = first_space::second_space; // छोटा नाम
fs::func(); // कॉल करता है
इनलाइन नेमस्पेस (C++11)
namespace version {
inline namespace v1 {
void func() { cout << "v1"; }
}
namespace v2 {
void func() { cout << "v2"; }
}
}
// version::func() v1::func() को कॉल करता है (इनलाइन के कारण)
अनाम नेमस्पेस
namespace {
int internal_var = 42; // केवल इस ट्रांसलेशन यूनिट में विजिबल
void internal_func() { }
}
// static ग्लोबल्स के बराबर
सर्वोत्तम अभ्यास
- नेमस्पेस नेस्टिंग को उथला रखें (2-3 स्तर तक)
- विवरणात्मक नाम उपयोग करें
- लंबे नेस्टेड नामों के लिए एलियास बनाएं
- आंतरिक लिंकेज के लिए अनाम नेमस्पेस प्रीफर करें
using namespace std;हेडर फ़ाइल्स में न करें