दिलचस्प पोस्ट
HTTP स्टेटस कोड 200 (कैश) बनाम स्टेटस कोड 304 में क्या अंतर है? कोड के माध्यम से फोन गैलरी कैसे खोलें PHP: UTF-8 स्ट्रिंग में निकटतम 7-बिट ASCII समकक्ष के साथ umlauts बदलें क्या एक ORM का उपयोग करने के लिए अच्छे कारण हैं? मंच पर आधारित आयात करने के लिए सी # में प्रीप्रोसेसर निर्देश स्थिति रिश्तेदार बनाम स्थिति निरपेक्ष? जावा: क्लास.इस पायथन क्यों मेरे मॉड्यूल को आयात करते समय चलाता है, और मैं इसे कैसे रोकूं? AngularJS – आइटम को सशर्त रूप से वापस करने के लिए एनजी-दोहर के साथ एक कस्टम फ़िल्टर की संरचना कैसे करें मुझे स्क्रिप्ट की निर्देशिका पायथन के साथ कैसे मिल सकती है? कॉलम में सामान्य मान के आधार पर डेटा फ्रेम की एक सूची में एक बड़ा डेटाफ्रेम विभाजित करें AngularJS: एकल पृष्ठ अनुप्रयोग में प्रमाणीकरण का उपयोग करने के लिए मूल उदाहरण मैं आरजीबी में 2 डी सरणी के रूप में छवि पिक्सेल के मान कैसे पढ़ सकता हूं? सी शेल में stdout को stderr को पुनर्निर्देशित करें UIView ऊर्ध्वाधर फ्लिप एनीमेशन

सी ++ स्टैंडर्ड लाइब्रेरी: सीओएटी, सीर, सीन और एंडल के लिए आवरण लिखने के लिए कैसे?

मुझे using namespace std करना पसंद नहीं है, लेकिन मैं भी हर cout , cin , cerr और endl सामने std:: टाइप करने के थक गया हूं। इसलिए, मैंने उन्हें ऐसे छोटे नामों को देने का सोचा:

 // STLWrapper.h #include <iostream> #include <string> extern std::ostream& Cout; extern std::ostream& Cerr; extern std::istream& Cin; extern std::string& Endl; // STLWrapper.cpp #include "STLWrapper.h" std::ostream& Cout = std::cout; std::ostream& Cerr = std::cerr; std::istream& Cerr = std::cin; std::string _EndlStr("\n"); std::string& Endl = _EndlStr; 

यह काम। लेकिन, क्या उपरोक्त में कोई समस्या है जो मुझे याद आ रही है? क्या ऐसा करने का एक बेहतर तरीका है?

Solutions Collecting From Web of "सी ++ स्टैंडर्ड लाइब्रेरी: सीओएटी, सीर, सीन और एंडल के लिए आवरण लिखने के लिए कैसे?"

क्यों नहीं

 using std::cin; using std::cout; 

और इसी तरह? फिर अपने कोड में आप cin , cout , आदि का उपयोग कर सकते हैं, बिना गलती से अपने कोड में बाकी सभी std नेमस्पेस के इंजेक्शन के बिना।

एलेक्स ने आपको एक उत्तर दिया है कि कैसे इस समस्या को वाक्यात्मक रूप से हल करें। हालांकि, मैं इस मुद्दे के संबंध में दो अन्य तर्कों को इंगित करना चाहता हूं:

  1. कोई फर्क नहीं पड़ता कि आप उपयोग किए जा रहे निर्देश ( using namespace std ) using namespace std उपयोग कर रहे हैं या इसकी कम बुरी बहन, एक उपयोग घोषणा ( using std::cout ), ओवरलोडिंग के कारण बुरा आश्चर्य हो सकता है std:: टाइप करने के लिए परेशानी नहीं है आधे रात डिबगिंग के लिए अपने कोड को पता लगाने के लिए std::distance() बजाय अपनी खुद की distance() फ़ंक्शन , सिर्फ इसलिए कि आपने एक छोटी सी गलती और std::distance() गलती से एक बेहतर मैच है

  2. कोड की एक पंक्ति एक बार लिखी जाती है , परन्तु – इसके जीवनकाल के आधार पर – यह दसियों, सैकड़ों और कुछ हज़ारों बार पढ़ा जाता है तो जब कोड की एक पंक्ति लिखने के लिए समय लगता है, बस कोई फर्क नहीं पड़ता , महत्वपूर्ण समय केवल कोड की एक रेखा को पढ़ने और व्याख्या करने में होता है । भले ही यह तीन गुना लंबे समय तक सभी उचित std:: जगह के साथ एक पंक्ति लिखने के लिए लेता है, अगर यह केवल 10% तेज पढ़ता है, तो यह अभी भी मुसीबत के लायक है।
    तो महत्वपूर्ण सवाल यह है: क्या सभी std:: के साथ कोड की रेखा को पढ़ना और व्याख्या करना आसान है या क्या यह कठिन है ? दूसरे जवाब से :

    यहां एक और डाटा पॉइंट है: कई, कई साल पहले, मैं इसे std:: साथ मानक लाइब्रेरी से सबकुछ उपसर्ग करने के लिए कष्टप्रद खोज भी करता था। फिर मैंने उस प्रोजेक्ट में काम किया जहां यह निर्णय लिया गया कि शुरूआत में दोनों निर्देशों और घोषणाओं using समारोह स्कोप के अलावा प्रतिबंधित कर दिया गया है। अंदाज़ा लगाओ? उपसर्ग को लिखने के लिए इस्तेमाल करने के लिए हमने बहुत से कुछ सप्ताह ले लिया और कुछ और हफ्तों के बाद भी हम यह मानते थे कि वास्तव में कोड को और अधिक पठनीय बनाया गया है। (इसके लिए एक कारण है: चाहे आप कम या अधिक गद्य पसंद करते हैं, व्यक्तिपरक होते हैं, लेकिन उपसर्ग निष्पक्ष कोड को स्पष्टता जोड़ते हैं। न केवल कंपाइलर, लेकिन आप भी, यह देखने में आसान है कि कौन सी पहचानकर्ता को संदर्भित किया गया है।)

    एक दशक में, उस प्रोजेक्ट में कई मिलियन लाइनें हो गए थे। चूंकि इन चर्चाओं को बार-बार आना पड़ता है, मैं एक बार उत्सुक था कि प्रोजेक्ट में वास्तव में उपयोग किए जाने वाले कार्य-दायरे (प्रायः) कितनी बार अनुमति दी गई थी। मैंने इसके लिए सूत्रों का इस्तेमाल किया और केवल एक या दो दर्जन स्थानों पर इसका उपयोग किया गया। मेरे लिए यह इंगित करता है कि, एक बार कोशिश की गई, डेवलपर्स को हर 100kLoC में भी एक बार निर्देशों का उपयोग करने के लिए std::

    मुझे लगता है कि यह दुख की बात है कि हर पुस्तक और ट्यूटोरियल आपको स्किड std:: रुक जाएगा, क्योंकि इससे लोगों को कोड को पढ़ने के लिए इस्तेमाल किया जाता है। जब मैंने कई वर्षों के लिए सी ++ (उपर्युक्त अनुभव के बाद) सिखाया, तो मैंने अपने छात्रों से कहा कि मैं अपने कोड में कोई भी निर्देशन या घोषणा using नहीं करना चाहता। (उस नियम का एकमात्र अपवाद using std::swap , BTW का using std::swap , जिसे आपको swap(a,b) नामस्थान std बाहर अधिभार उठाए जाने की आवश्यकता होगी।) एक बार जब वे इसे इस्तेमाल करते हैं, मन और, जब इसके बारे में पूछा गया, तो उन्होंने कहा कि वे बिना std:: उपसर्ग के कोड को भ्रमित कर रहे हैं। कुछ ने std:: उपसर्ग को एक किताब या ट्यूटोरियल से टाइप किया है, जिसमें यह नहीं था

नीचे की रेखा: std:: टाइपिंग के बारे में इतनी कठिनाई है कि हर कोई इस बारे में इतना काम करता है? अब तक मैं इसे 15 साल तक कर रहा हूं, और मैं बिल्कुल भी इसका using नहीं using रहा हूं।