लालित्य, encapsulation और एडीएल (Argument Dependent Lookup) का शोषण करने के लिए फ़ंक्शन तर्क के नामस्थान के अंदर एक फ़ंक्शन को परिभाषित करना आम है।बाइनरी ऑपरेटर के लिए सबसे अच्छा नेमस्पेस क्या है?
मान लीजिए कि मेरे पास अलग-अलग नामस्थान में दो पुस्तकालय हैं। तीन मामले हैं 1) एक पुस्तकालय मैं नियंत्रित करता हूं और दूसरा तीसरा पक्ष (उदाहरण के लिए बूस्ट) है, या 2) मैं दोनों को नियंत्रित करता हूं, या 3) मैं किसी को नियंत्रित नहीं करता (केवल "गोंद" कोड लिख रहा हूं)।
मैं कुछ इस तरह है,
namespace ns_A{
struct A{...}; // something that looks like iostream
}
namespace ns_B{
struct B{...};
}
मैं एक करने के लिए करने के लिए "धारा" बी चाहते हैं, क्या सबसे अच्छा विकल्प
namespace ???{ // what is more correct ns_A, or ns_B?
A& operator<<(A& a, B const& b){...}
}
है या मैं इसे दोनों नामस्थान में रखना चाहिए?
namespace ns_B{
A& operator<<(A& a, B const& b){...}
}
namespace ns_A{
using ns_B::operator<<;
}
कौन इस तरह एक द्विआधारी समारोह को परिभाषित करने के लिए सबसे अच्छा नाम स्थान है?
(सी ++ 11 के नाम स्थान इनलाइन किसी भी सिफारिश को बदलने करता है?)
(मैं उदाहरण operator<<
उपयोग करें, क्योंकि, अन्य बातों के समान होने के बावजूद यह लगता सहज namespace ns_B
पसंद करते हैं करने के लिए बेहतर हो।)
नामस्थान के साथ बेवकूफ मत बनो जिसे आप नियंत्रित नहीं करते हैं। – Walter