इस लेख में हम सी++ एसटीएल में काम करने, वाक्य रचना और std::is_abstract टेम्पलेट के उदाहरणों पर चर्चा करेंगे।
Is_abstract टेम्प्लेट यह जांचने में मदद करता है कि क्लास एक एब्सट्रैक्ट क्लास है या नहीं।
एब्स्ट्रैक्ट क्लास क्या है?
सार वर्ग एक ऐसा वर्ग है जिसमें कम से कम एक शुद्ध आभासी कार्य होता है। हम एब्सट्रैक्ट क्लासेस का उपयोग करते हैं क्योंकि जब हम फ़ंक्शन को परिभाषित करते हैं, तो हम इसके कार्यान्वयन को नहीं जानते हैं, इसलिए यह उस स्थिति में बहुत मददगार होता है जब हमें नहीं पता होता है कि किसी क्लास का फंक्शन आगे क्या करने वाला है, लेकिन हमें यकीन है कि वहाँ हमारे सिस्टम में इस तरह का एक फंक्शन होना चाहिए। इसलिए, हम एक शुद्ध वर्चुअल फ़ंक्शन घोषित करते हैं जो केवल घोषित किया जाता है और उस फ़ंक्शन का कार्यान्वयन नहीं होता है।
इसलिए, जब हम कक्षा के उदाहरण से जांचना चाहते हैं कि वर्ग एक सार वर्ग है या नहीं, तो हम is_abstract() का उपयोग करते हैं।
is_abstract() को itegral_constant से इनहेरिट किया गया है और यह true_type या false_type देता है, यह निर्भर करता है कि क्लास T का इंस्टेंस पॉलीमॉर्फिक क्लास टाइप है या नहीं।
सिंटैक्स
template <class T> struct is_abstract;
पैरामीटर
इस टेम्प्लेट में केवल एक पैरामीटर T हो सकता है, जो यह जांचने के लिए क्लास टाइप का है कि क्लास Ti एक एब्स्ट्रैक्ट क्लास है या नहीं।
रिटर्न वैल्यू
यह फ़ंक्शन बूल प्रकार का मान देता है, सही या गलत।
यदि T एक अमूर्त वर्ग है, और यदि T एक अमूर्त वर्ग नहीं है, तो यह सही है।
उदाहरण
#include <iostream> #include <type_traits> using namespace std; struct TP_1 { int var; }; struct TP_2 { virtual void dummy() = 0; }; class TP_3 : TP_2 { }; int main() { cout << boolalpha; cout << "checking for is_abstract: "; cout << "\nstructure TP_1 with one variable :"<< is_abstract<TP_1>::value; cout << "\nstructure TP_2 with one virtual variable : "<< is_abstract<TP_2>::value; cout << "\nclass TP_3 which is derived from TP_2 structure : "<< is_abstract<TP_3>::value; return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
checking for is_abstract: structure TP_1 with one variable : false structure TP_2 with one virtual variable : true class TP_3 which is derived from TP_2 structure : true
उदाहरण
#include <iostream> #include <type_traits> using namespace std; struct TP_1 { virtual void dummy() = 0; }; class TP_2 { virtual void dummy() = 0; }; struct TP_3 : TP_2 { }; int main() { cout << boolalpha; cout << "checking for is_abstract: "; cout << "\nstructure TP_1 with one virtual function :"<< is_abstract<TP_1>::value; cout << "\nclass TP_2 with one virtual function : "<< is_abstract<TP_2>::value; cout << "\nstructure TP_3 which is derived from TP_2 class : "<< is_abstract<TP_3>::value; return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
checking for is_abstract: structure TP_1 with one virtual function : true class TP_2 with one virtual function : true structure TP_3 which is derived from TP_2 class : true