दिलचस्प पोस्ट
समान मूल नीति को दरकिनार करने के तरीके टर्मिनल पर गिथब खातों को बदलने में समस्या आ रही है ओरेकल पी एल / एसक्यूएल – कस्टम एसएलईएलआरएम के साथ उपयोगकर्ता-निर्धारित अपवाद उठाएं साझा होस्टिंग पर जादू के भाव कैसे बंद करें? मैं एक IEnumerable <String> को IEnumerable के समूहों में कैसे विभाजित कर सकता हूं <स्ट्रिंग> नेस्टेड एनजी-दोहरा में 2 $ इंडेक्स वैल्यू को पारित करना जावा में स्थानीय चर क्यों प्रारंभ नहीं हुए हैं? मैं एक अनुरोध पेलोड के बजाय डेटा डेटा के रूप में डेटा कैसे पोस्ट कर सकता हूं? Android में सेल सेवा सिग्नल की ताकत कैसे प्राप्त करें? जावास्क्रिप्ट श्रोता, "कुंजीपटल" बैकस्पेस का पता नहीं लगाता है? मैं SQL सर्वर Windows मोड से मिश्रित मोड (SQL Server 2008) में कैसे बदल सकता हूं? आप प्रोग्राम में जावा में एक वेब पेज कैसे डाउनलोड करते हैं? HTTP POST अनुरोध की वर्ण एन्कोडिंग का पता लगा रहा है Django प्रोजेक्ट के लिए डायरेक्टरी संरचना का सर्वश्रेष्ठ अभ्यास यह पता लगा रहा है कि PHP चर एक संदर्भ / संदर्भित है

एक टेम्पलेट क्लास का कार्यान्वयन और घोषणा उसी हेडर फ़ाइल में क्यों होना चाहिए?

एक टेम्पलेट क्लास का कार्यान्वयन और घोषणा उसी हेडर फ़ाइल में क्यों होना चाहिए? क्या आप में से कोई भी उदाहरण के लिए इसे समझा सकता है?

वेब के समाधान से एकत्रित समाधान "एक टेम्पलेट क्लास का कार्यान्वयन और घोषणा उसी हेडर फ़ाइल में क्यों होना चाहिए?"

टेम्पलेट के प्रत्येक क्षणिकता के लिए कोड उत्पन्न करने के लिए संकलक को पूरी टेम्पलेट परिभाषा (केवल हस्ताक्षर नहीं) तक पहुंच की आवश्यकता है, इसलिए आपको फ़ंक्शन की परिभाषा को अपने शीर्ष लेख में ले जाना होगा।

अधिक जानकारी के लिए समावेश मॉडल के बारे में पढ़ें।

क्लास टेम्प्लेट की परिभाषा और इसके सदस्य कार्यों के क्रियान्वयन को प्रत्येक जगह पर दिखाई देना चाहिए जो इसे एक विशिष्ट प्रकार के साथ शुरू करते हैं। अर्थात् मेरे myTemplate<int> करने के लिए myTemplate<int> आपको अपने myTemplate<int> की पूर्ण परिभाषा और क्रियान्वयन देखने की myTemplate

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

उदाहरण के लिए, एक अभ्यास स्पष्ट रूप से एक। सीपीपी फ़ाइल में मापदंडों के अलग सेट के लिए एक टेम्पलेट को इन्स्तांत करना है और शीर्ष लेख में उन तत्काल extern को घोषित करना है। इस तरह, उन तत्त्वों को अन्य स्रोत फ़ाइलों में इस्तेमाल किया जा सकता है बिना टेम्पलेट सदस्य फ़ंक्शंस के कार्यान्वयन की आवश्यकता होने के लिए। हालांकि, जब तक कि आप कार्यान्वयन फ़ाइल में शामिल नहीं हो, आप टेम्पलेट पैरामीटर के अन्य सेट का उपयोग करने में सक्षम नहीं होंगे।

यानी यदि आपके पास myTemplate<int> और myTemplate<std::string> को extern रूप में परिभाषित किया गया है, तो आप उन्हें ठीक से उपयोग कर सकते हैं, लेकिन यदि myTemplate<double> को myTemplate<double> परिभाषित नहीं किया गया है, तो आप कार्यान्वयन के बिना इसका उपयोग नहीं कर सकते।

उनके पास नहीं है

क्या आवश्यक है कि टेम्पलेट परिभाषा के लिए तत्काल (जहां यह प्रयोग किया जाता है) पर दिखाई दे, ताकि संकलक इस बिंदु पर टेम्पलेट से कक्षा / फ़ंक्शन प्राप्त कर सके।

हालांकि टेम्पलेट वर्गों के लिए दो हेडर फाइलों का उपयोग करने के लिए यह बेहद आम है:

 // foo_fwd.hpp template <typename T, typename U> struct Foo; // foo.hpp #include "foo_fwd.hpp" template <typename T, typename U> struct Foo { typedef std::pair<T,U> type; }; 

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

 //is_foo.hpp #include <boost/mpl/bool.hpp> #include "foo_fwd.hpp" template <typename Z> struct is_foo: boost::mpl::false_ {}; template <typename T, typename U> struct is_foo< Foo<T,U> >: boost::mpl::true_ {}; 

जो संकलन-समय थोड़ा तेज कर सकता है।

एक सामान्य वर्ग के मामले में, घोषणा संकलन के लिए पर्याप्त है, और इसी परिभाषाओं को जोड़ा जाएगा।

टेम्पलेट्स के मामले में, कंपाइलर को कोड बनाने के लिए भी परिभाषा की आवश्यकता होती है।

अंतर सी ++ सामान्य प्रश्न में समझाया गया है