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

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


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

is_standard_layout เป็นเทมเพลตที่อยู่ภายใต้ไฟล์ส่วนหัว เทมเพลตนี้ใช้เพื่อตรวจสอบว่าประเภท T ที่กำหนดเป็นเลย์เอาต์มาตรฐานหรือไม่

เลย์เอาต์มาตรฐานใน 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