दिलचस्प पोस्ट
जेवीग्रीड पर वर्ड वर्प को कैसे कार्यान्वित करें जो आईई 7, आईई 8 और एफएफ पर काम करता है विंडोज पर जावा में एक फाइल रिक्त है या नहीं, यह जांचने के लिए सबसे कारगर तरीका है आपको कंप्यूटर की कुल रैम की संख्या कैसे मिलती है? आर में एक डेटाफ्रेम में प्रति समूह माध्य / माध्यिका की गणना कैसे करें एंड्रॉइड: पीडीएफ व्यूअर में बनाए गए अपने ऐप से पीडीएफ खोलें मैं एक स्पष्ट स्क्रिप्टबंडल को कैसे निर्दिष्ट कर सकता हूँ जिसमें आदेश शामिल है? स्ट्रट्र बनाम str_replace का उपयोग कब करना है? कौन सा निर्भरता इंजेक्शन उपकरण मैं इस्तेमाल करना चाहिए? HTML फ़ेविकॉन Google क्रोम पर दिखाई नहीं देगा इनलाइन मित्र कार्यों का दायरा क्या है? एक स्थैतिक आरंभीकरण ब्लॉक में एक योग्य स्थिर अंतिम चर की अनुमति क्यों नहीं है? विधि में एक प्रकार की विधि के रूप में एक ही मिटाना होता है क्या हर्डोप जॉब बनाने के लिए मानचित्रित या मैप्रेडिड पैकेज का उपयोग करना बेहतर है? पायथन नंबर स्ट्रिंग 0 से शुरू नहीं कर सकता। क्यों? JQuery / AJAX और PHP / MySQL का उपयोग करते हुए पहले ड्रॉपडाउन के चयन के आधार पर दूसरे ड्रॉपडाउन को कैसे पॉप्युलेट करना है?

आप C ++ में निर्भर नाम कैसे समझते हैं

मैं आमतौर पर टेम्पलेट्स के संदर्भ में इस अवधि के "आश्रित नाम" में आया हूं। हालांकि, मैं शायद ही कभी बाद के स्पर्श। इस प्रकार, स्वाभाविक रूप से निर्भर नामों की अवधारणा के बारे में अधिक जानना चाहूंगा।

टेम्पलेट के संदर्भ में और उनके बाहर आप इसे कैसे समझते हैं? उदाहरण को गंभीर रूप से प्रोत्साहित किया जाता है!

Solutions Collecting From Web of "आप C ++ में निर्भर नाम कैसे समझते हैं"

एक निर्भर नाम अनिवार्य रूप से ऐसा नाम है जो टेम्पलेट तर्क पर निर्भर करता है।

टेम्प्लेट का उपयोग करते समय टेम्पलेट की परिभाषा के बिंदु और तात्कालिकता के बिंदु के बीच भेद होता है, जहां आप वास्तव में टेम्पलेट का उपयोग करते हैं। नाम जो कि किसी टेम्पलेट पर निर्भर करते हैं, उस समय तक बाध्य नहीं होते जब तक कि नाम उन परिभाषाओं पर बाध्य नहीं होते हैं।

एक सरल उदाहरण होगा:

template< class T > int addInt( T x ) { return i + x.toInt(); } 

जहां एक घोषणा या परिभाषा i ऊपर दी गई परिभाषा से पहले प्रकट होने की आवश्यकता होगी, क्योंकि i टेम्पलेट तर्क T पर निर्भर नहीं होती है और इसलिए परिभाषा के बिंदु पर बाध्य है। अभी तक अज्ञात-प्रकार x चर के toInt सदस्य की परिभाषा केवल addInt समारोह से पहले दिखाई addInt है, क्योंकि यह वास्तव में कहीं पर निर्भर है क्योंकि यह एक आश्रित नाम है (तकनीकी रूप से तात्कालिकता को निकटतम बंद वैश्विक या नामस्थान के रूप में लिया जाता है उपयोग के बिंदु से पहले का गुंजाइश है और इसलिए इसे पहले उपलब्ध होना है)।

आश्रित नाम टेम्पलेट तर्क पर निर्भरता की विशेषता है। तुच्छ उदाहरण:

 #include <vector> void NonDependent() { //You can access the member size_type directly. //This is precisely specified as a vector of ints. typedef std::vector<int> IntVector; IntVector::size_type i; /* ... */ } template <class T> void Dependent() { //Now the vector depends on the type T. //Need to use typename to access a dependent name. typedef std::vector<T> SomeVector; typename SomeVector::size_type i; /* ... */ } int main() { NonDependent(); Dependent<int>(); return 0; } 

संपादित करें : जैसा कि मैंने नीचे दी गई टिप्पणी में उल्लेख किया है, यह आश्रित नामों का उपयोग करने के बारे में एक विशिष्ट स्थिति का एक उदाहरण है, जो बहुत बार प्रकट होता है। कभी-कभी आश्रित नामों के उपयोग के नियम नियमों की अपेक्षा सहज रूप से अपेक्षा नहीं कर सकते हैं।

उदाहरण के लिए, यदि आपके पास एक आश्रित वर्ग है जो एक घृणित आधार से प्राप्त किया गया है, लेकिन एक दायरे के भीतर जहां बेस क्लास का नाम जाहिरा तौर पर टेम्पलेट पर प्रदर्शित नहीं होता है, तो आपको नीचे की तरह एक कंपाइलर त्रुटि मिल सकती है।

 #include <iostream> template <class T> class Dependent { protected: T data; }; template <class T> class OtherDependent : public Dependent<T> { public: void printT()const { std::cout << "T: " << data << std::endl; //ERROR } }; int main() { OtherDependent<int> o; o.printT(); return 0; } 

यह त्रुटि इसलिए होती है क्योंकि कंपाइलर बेस क्लास टेम्पलेट के अंदर name पता नहीं लगाएगा क्योंकि यह T पर निर्भर नहीं है और इसके परिणामस्वरूप, यह एक डिफेन्ड नाम नहीं है। तय करने के तरीके, इसका उपयोग कर रहे हैं या निर्भर बेस क्लास टेम्पलेट को स्पष्ट रूप से बता रहे हैं:

 std::cout << "T: " << this->data << std::endl; //Ok now. std::cout << "T: " << Dependent<T>::data << std::endl; //Ok now.