मैं अन्य लोगों से सहमत हूँ - यह नाम संघर्ष, अस्पष्टता के लिए पूछ रहा है और फिर तथ्य यह है कि यह कम स्पष्ट है। जबकि मैं इसका उपयोग देख सकता हूं using
, मेरी व्यक्तिगत प्राथमिकता इसे सीमित करना है। मैं यह भी दृढ़ता से विचार करूंगा कि कुछ अन्य लोगों ने क्या कहा:
यदि आप एक फ़ंक्शन नाम ढूंढना चाहते हैं, जो काफी सामान्य नाम हो सकता है, लेकिन आप इसे केवल std
नामस्थान (या रिवर्स - आप उन सभी कॉल को बदलना चाहते हैं , जो नाम स्थान std
, नाम स्थान X
, ...) में नहीं चाहते हैं तो फिर आप ऐसा करने का प्रस्ताव कैसे देते हैं?
आप इसे करने के लिए एक कार्यक्रम लिख सकते हैं, लेकिन क्या अपनी परियोजना को बनाए रखने के लिए कार्यक्रम लिखने के बजाय अपने प्रोजेक्ट पर काम करने में समय बिताना बेहतर नहीं होगा?
व्यक्तिगत रूप से, मैं वास्तव में std::
उपसर्ग को बुरा नहीं मानता। मुझे यह नहीं की तुलना में अधिक पसंद है। मुझे नहीं पता कि क्या है क्योंकि यह स्पष्ट है और मुझसे कहता है "यह मेरा कोड नहीं है ... मैं मानक पुस्तकालय का उपयोग कर रहा हूं" या अगर यह कुछ और है, लेकिन मुझे लगता है कि यह अच्छा लग रहा है। यह अजीब हो सकता है कि मुझे हाल ही में C ++ मिला (अभी भी C और अन्य भाषाएं बहुत अधिक समय तक इस्तेमाल की गई हैं और C मेरी सभी समय की पसंदीदा भाषा है, विधानसभा के ठीक ऊपर)।
एक और बात है, हालांकि यह कुछ हद तक ऊपर से संबंधित है और अन्य क्या बताते हैं। हालांकि यह बुरा अभ्यास हो सकता है, मैं कभी-कभी std::name
मानक पुस्तकालय संस्करण और कार्यक्रम-विशिष्ट कार्यान्वयन के लिए नाम के लिए आरक्षित करता हूं । हां, वास्तव में यह आपको काट सकता है और आपको मुश्किल से काट सकता है, लेकिन यह सब नीचे आता है कि मैंने इस परियोजना को खरोंच से शुरू किया था, और मैं इसके लिए एकमात्र प्रोग्रामर हूं। उदाहरण: मैं ओवरलोड करता हूं std::string
और इसे कॉल करता हूं string
। मेरे पास सहायक जोड़ हैं। मैंने अपने C और Unix (+ Linux) प्रवृत्ति के कारण निचले मामलों के नामों के कारण इसे आंशिक रूप से किया।
इसके अलावा, आपके पास नाम स्थान उपनाम हो सकते हैं। यहां एक उदाहरण है जहां यह उपयोगी है जिसे शायद संदर्भित नहीं किया गया है। मैं C ++ 11 मानक का उपयोग करता हूं और विशेष रूप से libstdc ++ के साथ। खैर, इसका पूरा std::regex
समर्थन नहीं है । ज़रूर, यह संकलित करता है, लेकिन यह प्रोग्रामर के अंत में एक त्रुटि होने की तर्ज पर एक अपवाद फेंकता है। लेकिन यह कार्यान्वयन की कमी है।
तो यहाँ है कि मैंने इसे कैसे हल किया। बूस्ट के रेगेक्स को स्थापित करें, और इसे लिंक करें। फिर, मैं निम्न कार्य करता हूं ताकि जब libstdc ++ ने इसे पूरी तरह से लागू किया हो, तो मुझे केवल इस ब्लॉक को हटाने की आवश्यकता है और कोड समान रहता है:
namespace std
{
using boost::regex;
using boost::regex_error;
using boost::regex_replace;
using boost::regex_search;
using boost::regex_match;
using boost::smatch;
namespace regex_constants = boost::regex_constants;
}
मैं इस पर बहस नहीं करूंगा कि यह एक बुरा विचार है या नहीं। मैं हालांकि यह तर्क दूंगा कि यह मेरी परियोजना के लिए इसे साफ रखता है और एक ही समय में इसे विशिष्ट बनाता है: सच है, मुझे बूस्ट का उपयोग करना होगा, लेकिन मैं इसका उपयोग कर रहा हूं जैसे कि libstdc ++ अंततः होगा। हां, अपना स्वयं का प्रोजेक्ट शुरू करना और बहुत शुरुआत में एक मानक (...) के साथ शुरू करना रखरखाव, विकास और परियोजना से जुड़ी हर चीज की मदद करने के साथ बहुत लंबा रास्ता तय करता है!
बस कुछ स्पष्ट करने के लिए: मुझे नहीं लगता कि वास्तव में एक वर्ग के नाम का उपयोग करना एक अच्छा विचार है / एसटीएल में जो कुछ भी जानबूझकर और विशेष रूप से इसके स्थान पर। स्ट्रिंग अपवाद है (मेरे लिए पहले, ऊपर या दूसरे को अनदेखा करें, यदि आपको अवश्य) मेरे लिए 'स्ट्रिंग' का विचार पसंद नहीं आया।
जैसा कि यह है, मैं अभी भी सी के प्रति बहुत पक्षपाती हूं और सी ++ के खिलाफ पक्षपाती हूं। विवरण बख्शते हुए, मैं सी पर जो काम करता हूं उसमें से अधिकांश सी अधिक फिट होता है (लेकिन यह एक अच्छा व्यायाम और खुद को बनाने का एक अच्छा तरीका है। एक और भाषा सीखें और बी। वस्तु / वर्गों / आदि के खिलाफ कम पक्षपाती न होने की कोशिश करें जो शायद बेहतर कहा गया है। कम बंद दिमाग वाले, कम अभिमानी और अधिक स्वीकार करने वाले।)। लेकिन क्या है (, यह नहीं है यह काफी सामान्य है?) मैं वास्तव में सूची का उपयोग करते हैं, और प्रकार (एक ही बात) दो कि एक नाम टकराव का कारण होता है, तो मैं ऐसा करने थे नाम हैं: उपयोगी क्या कुछ पहले से ही सुझाव दिया है using namespace std;
, और इसलिए उस अंत तक, मैं विशिष्ट होना पसंद करता हूं, नियंत्रण में और यह जानना कि अगर मैं इसे मानक उपयोग करने का इरादा रखता हूं तो मुझे इसे निर्दिष्ट करना होगा। सीधे शब्दों में कहें: कोई अनुमति नहीं दी।
और के रूप में बूस्ट के regex हिस्सा बनाने के लिए std
। मैं भविष्य के एकीकरण के लिए ऐसा करता हूं और फिर से, मैं पूरी तरह से मानता हूं कि यह पूर्वाग्रह है - मुझे नहीं लगता कि यह उतना ही बदसूरत है boost::regex:: ...
। वास्तव में, यह मेरे लिए एक और बात है। C ++ में बहुत सी ऐसी चीजें हैं जो मुझे अभी भी लुक्स और तरीकों में पूरी तरह से स्वीकार करने के लिए बाकी हैं (एक अन्य उदाहरण: varadic टेम्प्लेट्स बनाम var आर्ग्युमेंट्स [हालाँकि मैं मानता हूं कि varadic टेम्प्लेट बहुत उपयोगी हैं!])। यहां तक कि जो मैं स्वीकार करता हूं वह मुश्किल था, और मेरे पास अभी भी उनके साथ मुद्दे हैं।