2010-03-23 15 views
7

का उपयोग करते समय लंबे/कंपाउंड नेमस्पेस मैं एक परियोजना पर काम कर रहा हूं जहां सी # (95%) और सी ++/सीएलआई (5%) का मिश्रण उपयोग किया जाता है।सी ++/सीएलआई

नामस्थान नामकरण सम्मेलन जिसका लक्ष्य मैं कर रहा हूं वह अच्छा पुराना Company.Technology.Etc. है। यह सी # के लिए पूरी तरह से ठीक काम करता है। अब, क्या मैं इसे सी ++ कक्षाओं में ले जा सकता हूं? मैंने here पढ़ा है कि कंपाउंड नेमस्पेस C++ में समर्थित नहीं हैं।

हूँ मैं अनाड़ी

namespace Company { 
    namespace Technology { 
     namespace Etc { 
      ... 
     } 
    } 
} 

क्रम लगातार बने रहने के लिए के साथ फंस रहे हैं?

क्या यह लगातार बने रहने की कोशिश करने लायक है?

उत्तर

8

हां, आप इसके साथ अटक गए हैं, यह link देखें। मेरी राय में इसका उपयोग करने लायक है क्योंकि यह नामस्थानों का उपयोग करने के लिए अधिक पठनीय और प्रबंधनीय है। मैं आमतौर पर देशी सी ++ में भी ऐसा करता हूं।

2

Arg! हमने यहां कुछ कोड के लिए भी ऐसा किया था। मुझे उससे नफरत है।

क्या आपके पेचेक पर हस्ताक्षर करने वाले लोगों के बारे में कोई भ्रम है? क्या होता है जब CompanyOtherCorp द्वारा खरीदा जाता है, या विपणन विभाग का निर्णय है कि Technology अब eTech के रूप में जाना जाएगा? कितना कोड बदलना होगा?

आम तौर पर, मैं विरोधी उपयोग कर रहा हूं। लेकिन इस तरह की स्थितियों में, जहां नामस्थान शायद पहले स्थान पर कभी नहीं किए गए थे और आप केवल भविष्य में कोड परिवर्तनों को सहेज रहे हैं, मैं प्रत्येक संदर्भ के सामने उस विशाल वार्ट को चिपकाने के बजाय निम्नलिखित पंक्ति को प्रोत्साहित करता हूं:

using Company::Technology;

नामस्थान आमतौर पर तब बनाया जाना चाहिए जब आपके पास कई संबंधित वर्ग और वस्तुएं हों जिन्हें आप उनके पहचानकर्ता में एक ही नाम को छूने के लिए प्रेरित हैं। इस तरह, उन्हें foo_operation और foo_class के रूप में संदर्भित करने के बजाय आप foo::operation और foo::class करते हैं।

2

नेस्टेड नेमस्पेस में प्रकारों को परिभाषित करने के लिए, हाँ जैसा कि आप वर्णन करते हैं, आपको इसे करना होगा। लेकिन उपयोग करने के लिए प्रकार, namespace CTE = Company::Technology::Etc; कोशिश, तो आप जैसे CTE::SomeClass someClass;

1

स्वीकार किए जाते हैं जवाब करने के लिए सक्षम होना चाहिए दृश्य स्टूडियो 2015 कोई लंबे समय तक सही है।

आप कंपेलरफ्लैग/std: C++ नवीनतम सभी सिडस्टरीज के साथ उपयोग कर सकते हैं और नेस्टेड नेमस्पेस प्राप्त कर सकते हैं।

संबंधित मुद्दे