ในบทความนี้ เราจะพูดถึงการทำงาน ไวยากรณ์ และตัวอย่างของเทมเพลต std::is_polymorphic ใน C++ STL
is_polymorphic เป็นเทมเพลตที่อยู่ภายใต้ไฟล์ส่วนหัว
คลาสพหุสัณฐานคืออะไร
คลาสที่ประกาศฟังก์ชันเสมือนจากคลาสนามธรรมที่ประกาศฟังก์ชันเสมือน คลาสนี้มีการประกาศฟังก์ชันเสมือนที่ประกาศในคลาสอื่น
ไวยากรณ์
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