Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เทมเพลต is_polymorphic ใน C++


ในบทความนี้ เราจะพูดถึงการทำงาน ไวยากรณ์ และตัวอย่างของเทมเพลต std::is_polymorphic ใน C++ STL

is_polymorphic เป็นเทมเพลตที่อยู่ภายใต้ไฟล์ส่วนหัว ใน C++ เทมเพลตนี้ใช้เพื่อตรวจสอบว่าคลาสนั้นเป็นคลาสโพลีมอร์ฟิคหรือไม่ และส่งคืนผลลัพธ์ที่เป็นจริงหรือเท็จตามนั้น

คลาสพหุสัณฐานคืออะไร

คลาสที่ประกาศฟังก์ชันเสมือนจากคลาสนามธรรมที่ประกาศฟังก์ชันเสมือน คลาสนี้มีการประกาศฟังก์ชันเสมือนที่ประกาศในคลาสอื่น

ไวยากรณ์

template <class T> is_polymorphic;

พารามิเตอร์

เทมเพลตสามารถมีได้เฉพาะพารามิเตอร์ประเภท T และตรวจสอบว่าประเภทที่กำหนดเป็นคลาสโพลีมอร์ฟิคหรือไม่

คืนค่า

ส่งคืนค่าบูลีนเป็นค่าจริงหากประเภทที่กำหนดเป็นคลาสโพลีมอร์ฟิค และเป็นเท็จหากประเภทที่กำหนดไม่ใช่คลาสโพลีมอร์ฟิค

ตัวอย่าง

Input: class B { virtual void fn(){} };
   class C : B {};
   is_polymorphic<B>::value;
Output: True

Input: class A {};
   is_polymorphic<A>::value;
Output: False

ตัวอย่าง

#include <iostream>
#include <type_traits>
using namespace std;
struct TP {
   virtual void display();
};
struct TP_2 : TP {
};
class TP_3 {
   virtual void display() = 0;
};
struct TP_4 : TP_3 {
};
int main() {
   cout << boolalpha;
   cout << "Checking for is_polymorphic: ";
   cout << "\n structure TP with one virtual function : "<<is_polymorphic<TP>::value;
   cout << "\n structure TP_2 inherited from TP: "<<is_polymorphic<TP_2>::value;
   cout << "\n class TP_3 with one virtual function: "<<is_polymorphic<TP_3>::value;
   cout << "\n class TP_4 inherited from TP_3: "<< is_polymorphic<TP_4>::value;
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Checking for is_polymorphic:
structure TP with one virtual function : true
structure TP_2 inherited from TP: true
class TP_3 with one virtual function: true
class TP_4 inherited from TP_3: true

ตัวอย่าง

#include <iostream>
#include <type_traits>
using namespace std;
struct TP {
   int var;
};
struct TP_2 {
   virtual void display();
};
class TP_3: TP_2 {
};
int main() {
   cout << boolalpha;
   cout << "Checking for is_polymorphic: ";
   cout << "\n structure TP with one variable : "<<is_polymorphic<TP>::value;
   cout << "\n structure TP_2 with one virtual function : "<<is_polymorphic<TP_2>::value;
   cout << "\n class TP_3 inherited from structure TP_2: "<<is_polymorphic<TP_3>::value;
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Checking for is_polymorphic:
structure TP with one variable : false
structure TP_2 with one virtual function : true
class TP_3 inherited from structure TP_2 : true