विंसेंट रॉबर्ट अपनी टिप्पणी में सही है कि आप C ++ में नामस्थानों का उपयोग कैसे ठीक से करते हैं? ।
नेमस्पेस का उपयोग करना
नाम टकराव से बचने में मदद करने के लिए नाम स्थान का कम से कम उपयोग किया जाता है। जावा में, इसे "org.domain" मुहावरे के माध्यम से लागू किया जाता है (क्योंकि यह माना जाता है कि कोई व्यक्ति अपने डोमेन नाम के अलावा किसी अन्य चीज का उपयोग नहीं करेगा)।
C ++ में, आप अपने मॉड्यूल के सभी कोड को एक नाम स्थान दे सकते हैं। उदाहरण के लिए, एक मॉड्यूल MyModule.dll के लिए, आप इसके कोड को नामस्थान MyModule दे सकते हैं। मैंने MyCompany :: MyProject :: MyModule का उपयोग करते हुए किसी अन्य व्यक्ति को देखा है। मुझे लगता है कि यह ओवरकिल है, लेकिन सभी में, यह मुझे सही लगता है।
"का उपयोग कर"
का उपयोग बड़ी सावधानी से किया जाना चाहिए क्योंकि यह एक नाम स्थान से आपके वर्तमान नामस्थान में प्रभावी रूप से एक (या सभी) प्रतीकों को आयात करता है।
हेडर फ़ाइल में इसे करना बुरा है क्योंकि आपका हेडर इसमें मौजूद हर स्रोत को प्रदूषित करेगा (यह मुझे मैक्रोज़ की याद दिलाता है ...), और यहां तक कि स्रोत फ़ाइल में, फ़ंक्शन स्कोप के बाहर खराब शैली क्योंकि यह वैश्विक दायरे में आयात करेगा नामस्थान से प्रतीक।
"उपयोग" का उपयोग करने का सबसे सुरक्षित तरीका चुनिंदा प्रतीकों को आयात करना है:
void doSomething()
{
using std::string ; // string is now "imported", at least,
// until the end of the function
string a("Hello World!") ;
std::cout << a << std::endl ;
}
void doSomethingElse()
{
using namespace std ; // everything from std is now "imported", at least,
// until the end of the function
string a("Hello World!") ;
cout << a << endl ;
}
आपको "नाम स्थान std का उपयोग करते हुए" बहुत सारे दिखाई देंगे; ट्यूटोरियल या उदाहरण कोड में। कारण पढ़ने को आसान बनाने के लिए प्रतीकों की संख्या को कम करना है, इसलिए नहीं कि यह एक अच्छा विचार है।
"नेमस्पेस एसटीडी का उपयोग करना ;" स्कॉट मेयर्स द्वारा हतोत्साहित किया गया है (मुझे ठीक से याद नहीं है कि कौन सी पुस्तक है, लेकिन यदि आवश्यक हो तो मैं इसे पा सकता हूं)।
नामस्थान रचना
नाम स्थान पैकेज से अधिक हैं। एक और उदाहरण बज़्ने स्ट्रॉस्ट्रुप की "द सी ++ प्रोग्रामिंग लैंग्वेज" में पाया जा सकता है।
"स्पेशल एडिशन" में, 8.2.8 नेम्पस्पेस संरचना में , वह बताता है कि आप दो नामस्थान AAA और BBB को CCC नामक एक दूसरे में कैसे मिला सकते हैं। इस प्रकार CCC AAA और BBB दोनों के लिए एक उपनाम बन जाता है:
namespace AAA
{
void doSomething() ;
}
namespace BBB
{
void doSomethingElse() ;
}
namespace CCC
{
using namespace AAA ;
using namespace BBB ;
}
void doSomethingAgain()
{
CCC::doSomething() ;
CCC::doSomethingElse() ;
}
आप अपने स्वयं के कस्टम नामस्थान इंटरफ़ेस का निर्माण करने के लिए विभिन्न नामस्थानों से चुनिंदा प्रतीकों को भी आयात कर सकते हैं। मुझे अभी तक इसका व्यावहारिक उपयोग नहीं करना है, लेकिन सिद्धांत रूप में, यह अच्छा है।
std
नाम का उपसर्ग लगाने के बजाय प्रतीकों का उपयोग करने के लिए उपयोग करना बेहतर हैusing
। इसलिए मैं हमेशा लिखता हूंstd::cout
याstd::string
अब क्योंकि मैं उन्हें अब फोन करता हूं। मैं कभी नहीं लिखूंगाcout
।