यहां हम देखेंगे कि कैसे हम किसी नेमस्पेस को बढ़ा सकते हैं, और कैसे अनाम (unnamed/anonymous) नेमस्पेस का उपयोग किया जा सकता है।
नेमस्पेस बढ़ाना (Extending Namespace)
कभी-कभी हम एक नेमस्पेस परिभाषित करते हैं। फिर हम उसी परिभाषा के साथ नेमस्पेस को फिर से लिख सकते हैं। यदि पहले में कुछ मेंबर्स हैं, और दूसरे में कुछ अन्य मेंबर्स हैं, तो नेमस्पेस बढ़ जाता है। हम उस नेमस्पेस के सभी मेंबर्स का उपयोग कर सकते हैं।
उदाहरण
#include <iostream>
using namespace std;
namespace my_namespace {
int my_var = 10;
}
namespace my_namespace { // नेमस्पेस बढ़ाना
int my_new_var = 40;
}
int main() {
cout << "my_var का मान: " << my_namespace::my_var << endl;
cout << "my_new_var का मान: " << my_namespace::my_new_var << endl;
return 0;
}
आउटपुट
my_var का मान: 10 my_new_var का मान: 40
यह सुविधा बड़े प्रोजेक्ट्स में उपयोगी है जहां एक ही नेमस्पेस को कई फाइलों में परिभाषित किया जा सकता है।
अनाम नेमस्पेस (Unnamed/Anonymous Namespace)
अनाम नेमस्पेस का कोई नाम नहीं होता। इनके अलग गुण होते हैं:
- ये उसी प्रोग्राम में सीधे उपयोग करने योग्य हैं।
- ये यूनिक आइडेंटिफायर्स घोषित करने के लिए उपयोग किए जाते हैं।
- इस प्रकार के नेमस्पेस का नाम कंपाइलर द्वारा विशिष्ट रूप से उत्पन्न किया जाता है।
- इसे केवल उस फाइल से एक्सेस किया जा सकता है जहां यह बनाया गया है (इंटरनल लिंकेज)।
- अनाम नेमस्पेस, वेरिएबल्स के
staticडिक्लेरेशन का प्रतिस्थापन हैं।
उदाहरण
#include <iostream>
using namespace std;
namespace { // अनाम नेमस्पेस
int my_var = 10;
}
int main() {
cout << "my_var का मान: " << my_var << endl; // सीधे एक्सेसिबल
return 0;
}
आउटपुट
my_var का मान: 10
अनाम नेमस्पेस बनाम static
| पहलू | अनाम नेमस्पेस | static (ग्लोबल) |
|---|---|---|
| स्कोप | फाइल स्कोप (ट्रांसलेशन यूनिट) | फाइल स्कोप |
| लिंकेज | इंटरनल | इंटरनल |
| टाइप्स के लिए उपयोग | हां (क्लास, एनम, आदि) | नहीं (केवल वेरिएबल्स/फ़ंक्शन्स) |
| आधुनिक C++ शैली | पसंदीदा | विरासत (C स्टाइल) |
व्यावहारिक उपयोग
// file1.cpp
namespace {
int internal_counter = 0; // केवल इस फाइल में दृश्यमान
void helper() { /* ... */ }
}
// file2.cpp
namespace {
int internal_counter = 0; // अलग वेरिएबल, कोई टकराव नहीं!
void helper() { /* ... */ }
}
प्रत्येक ट्रांसलेशन यूनिट को अपना यूनिक अनाम नेमस्पेस मिलता है, जिससे नाम टकराव रोका जाता है।