मैंने C ++ से जावा और C # में स्विच किया और मुझे लगता है कि नामस्थान / पैकेज का उपयोग वहाँ बेहतर है (अच्छी तरह से संरचित)। फिर मैं C ++ पर वापस आया और उसी तरह नामस्थानों का उपयोग करने की कोशिश की, लेकिन आवश्यक सिंटैक्स शीर्षलेख फ़ाइल के भीतर भयानक है।
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
निम्नलिखित मुझे भी अजीब लगता है (गहरे इंडेंट से बचने के लिए):
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{
क्या उपरोक्त चीज़ को व्यक्त करने का एक छोटा तरीका है? मुझे कुछ याद आ रहा है
namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass
अपडेट करें
ठीक है, कुछ लोग कहते हैं कि जावा / सी # और सी ++ में उपयोग की अवधारणा अलग है। वास्तव में? मुझे लगता है कि (गतिशील) वर्ग लोडिंग केवल नामस्थान (यह एक बहुत ही तकनीकी तर्कपूर्ण परिप्रेक्ष्य है) के लिए एकमात्र उद्देश्य नहीं है। मुझे इसे पठनीयता और संरचनाकरण के लिए क्यों नहीं इस्तेमाल करना चाहिए, उदाहरण के लिए "इंटेलीजेंसी" के बारे में सोचें।
वर्तमान में, किसी नाम स्थान के बीच कोई तर्क / गोंद नहीं है और आप वहां क्या पा सकते हैं। जावा और C # यह बहुत बेहतर करता है ... क्यों <iostream>
और इसमें नामस्थान शामिल हैं std
? ठीक है, अगर आप कहते हैं कि तर्क हेडर पर भरोसा करना चाहिए शामिल करने के लिए, क्यों # शामिल की तरह एक "IntelliSense 'दोस्ताना सिंटैक्स का उपयोग करता नहीं करता है #include <std::io::stream>
या <std/io/stream>
? मुझे लगता है कि जावा / C # की तुलना में डिफ़ॉल्ट लिबास में लापता संरचनावाद C ++ की कमजोरी है।
यदि संघर्षों से निपटने की विशिष्टता एक बिंदु है (जो कि सी # और जावा का एक बिंदु है, तो भी) एक अच्छा विचार यह है कि प्रोजेक्ट नाम या कंपनी के नाम को नामस्थान के रूप में उपयोग करें, क्या आपको ऐसा नहीं लगता है?
एक तरफ यह कहा जाता है कि सी ++ सबसे अधिक लचीला है ... लेकिन सभी ने कहा "ऐसा नहीं करते"? ऐसा लगता है कि C ++ कई काम कर सकता है लेकिन C # की तुलना में कई मामलों में सबसे आसान चीजों के लिए भी एक भयानक सिंटैक्स है।
अपडेट २
अधिकांश उपयोगकर्ता कहते हैं कि दो स्तरों से अधिक गहरा घोंसला बनाना बकवास है। ठीक है, तो विंडोज के बारे में क्या :: UI :: Xaml और विंडोज :: UI :: Xaml :: नियंत्रण :: विजेता के विकास में नाम स्थान? मुझे लगता है कि Microsoft नामस्थानों का उपयोग समझ में आता है और यह वास्तव में सिर्फ 2 स्तरों से अधिक गहरा है। मुझे लगता है कि बड़े पुस्तकालयों / परियोजनाओं के लिए एक गहन घोंसले के शिकार की आवश्यकता है (मुझे एक्स्ट्रालांग क्लैसमनैमेबेक्यूएट टेवरीइंसिंग इनइमनाम नामस्थान जैसे वर्ग नामों से नफरत है ... तो आप वैश्विक नेमस्पेस में भी सब कुछ डाल सकते हैं।
अपडेट 3 - निष्कर्ष
ज्यादातर कहते हैं कि "ऐसा मत करो", लेकिन ... यहां तक कि बढ़ावा एक गहरी घोंसले के शिकार है तो एक या दो स्तरों। हाँ, यह एक पुस्तकालय है लेकिन: यदि आप पुन: प्रयोज्य कोड चाहते हैं - अपने स्वयं के कोड के साथ एक पुस्तकालय की तरह व्यवहार करें जो आप किसी और को देंगे। मैं नाम स्थान का उपयोग करते हुए डिस्कवरी उद्देश्यों के लिए एक गहरी नेस्टिंग का भी उपयोग करता हूं।
namespace
कीवर्ड का दुरुपयोग है ?