Computer >> Máy Tính >  >> Lập trình >> C ++

mẫu is_standard_layout trong C ++

Trong bài viết này, chúng ta sẽ thảo luận về cách làm việc, cú pháp và các ví dụ của mẫu std ::is_standard_layout trong C ++ STL.

is_standard_layout là một mẫu nằm trong tệp tiêu đề . Mẫu này được sử dụng để kiểm tra xem kiểu T đã cho có phải là bố cục chuẩn hay không.

Bố cục tiêu chuẩn trong C ++ là gì?

Kiểu Bố cục Chuẩn là kiểu có cấu trúc tuyến tính đơn giản (như chúng ta thấy trong mảng) và điều khiển truy cập có thể dễ dàng sử dụng để giao tiếp với chương trình được viết bằng các ngôn ngữ lập trình khác. Đây là loại được viết với ý tưởng về một mã cho tất cả các ngôn ngữ lập trình.

Lớp bố cục tiêu chuẩn có các tính năng sau -

  • Nó sẽ không có chức năng ảo hoặc các lớp ảo.
  • Phải có cùng một quyền kiểm soát truy cập (công khai, riêng tư, được bảo vệ) cho tất cả các lớp.
  • Không có kiểu dữ liệu không tĩnh.
  • Không có lớp cơ sở nào cùng kiểu với kiểu dữ liệu không tĩnh đầu tiên của nó.

Cú pháp

template <class T>is_standard_layout;

Tham số

Mẫu chỉ có thể có tham số kiểu T và kiểm tra xem T có phải là kiểu bố cục chuẩn hay không.

Giá trị trả về

Nó trả về giá trị Boolean, true nếu kiểu đã cho là kiểu bố cục chuẩn và false nếu kiểu đã cho không phải là kiểu bố cục chuẩn.

Ví dụ

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

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

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

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

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