ในบทความนี้ เราจะพูดถึงการทำงาน ไวยากรณ์ และตัวอย่างของเทมเพลต std::is_standard_layout ใน C++ STL
is_standard_layout เป็นเทมเพลตที่อยู่ภายใต้ไฟล์ส่วนหัว
เลย์เอาต์มาตรฐานใน C++ คืออะไร
Standard Layout type เป็นประเภทที่มีโครงสร้างเชิงเส้นอย่างง่าย (เช่นที่เราเห็นในอาร์เรย์) และการควบคุมการเข้าถึงซึ่งสามารถใช้สื่อสารกับโปรแกรมที่เขียนในภาษาโปรแกรมอื่น ๆ ได้อย่างง่ายดาย นี่คือประเภทที่เขียนด้วยแนวคิดของรหัสเดียวสำหรับภาษาการเขียนโปรแกรมทั้งหมด
คลาสเลย์เอาต์มาตรฐานมีคุณสมบัติดังต่อไปนี้ -
- จะต้องไม่มีฟังก์ชันเสมือนหรือคลาสเสมือน
- ต้องมีการควบคุมการเข้าถึงเหมือนกัน (สาธารณะ ส่วนตัว ป้องกัน) สำหรับทุกชั้นเรียน
- ไม่มีประเภทข้อมูลที่ไม่คงที่
- ไม่มีคลาสฐานที่เป็นประเภทเดียวกันกับประเภทข้อมูลที่ไม่คงที่ประเภทแรก
ไวยากรณ์
template <class T>is_standard_layout;
พารามิเตอร์
เทมเพลตมีได้เฉพาะพารามิเตอร์ประเภท T และตรวจสอบว่า T เป็นประเภทเลย์เอาต์มาตรฐานหรือไม่
คืนค่า
ส่งคืนค่าบูลีนเป็น true หากประเภทที่กำหนดเป็นประเภทเลย์เอาต์มาตรฐาน และเป็น false หากประเภทที่กำหนดไม่ใช่ประเภทเลย์เอาต์มาตรฐาน
ตัวอย่าง
Input: is_standard_layout<int>::value; Output: True Input: class A{ int a; }; class B : public A { int b; }; is_standard_layout<B>::value; Output: False
ตัวอย่าง
#include <iostream> #include <type_traits> using namespace std; class TP { int var; }; struct TP_2 { int var; private: int var_2; }; union TP_3 { }; int main() { cout << boolalpha; cout << "checking for is_standard_layout template for class : "<< is_standard_layout<TP>::value; cout << "\nchecking for is_standard_layout template for structure: "<< is_standard_layout<TP_2>::value; cout << "\nchecking for is_standard_layout template for union : "<< is_standard_layout<TP_3>::value; cout << "\nchecking for is_standard_layout template for char : "<< is_standard_layout<char>::value; cout << "\nchecking for is_standard_layout template for int : "<< is_standard_layout<int>::value; return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
checking for is_standard_layout template for class : true checking for is_standard_layout template for structure: false checking for is_standard_layout template for union : true checking for is_standard_layout template for char : true checking for is_standard_layout template for int : true
ตัวอย่าง
#include <iostream> #include <type_traits> using namespace std; class TP { int var; }; class TP_2 { int var; private: int var_2; }; class TP_3 { }; int main() { cout << boolalpha; cout << "checking for is_standard_layout template for class with one variable : "<< is_standard_layout<TP>::value; cout << "\nchecking for is_standard_layout template for class with one private variable: "<< is_standard_layout<TP_2>::value; cout << "\nchecking for is_standard_layout template for class with no variable : "<< is_standard_layout<TP_3>::value; cout << "\nchecking for is_standard_layout template for int * : "<< is_standard_layout<int*>::value; cout << "\nchecking for is_standard_layout template for float : "<< is_standard_layout<float>::value; return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
checking for is_standard_layout template for class with one variable : true checking for is_standard_layout template for class with one private variable: true checking for is_standard_layout template for class with no variable : true checking for is_standard_layout template for int * : true checking for is_standard_layout template for float : true