Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 is_standard_layout 템플릿

<시간/>

이 기사에서는 C++ STL에서 std::is_standard_layout 템플릿의 작동, 구문 및 예에 대해 논의할 것입니다.

is_standard_layout은 헤더 파일 아래에 있는 템플릿입니다. 이 템플릿은 주어진 유형 T가 표준 레이아웃인지 여부를 확인하는 데 사용됩니다.

C++의 표준 레이아웃이란 무엇입니까?

표준 레이아웃 유형은 배열에서 보는 것처럼 단순한 선형 구조와 다른 프로그래밍 언어로 작성된 프로그램과 쉽게 통신하는 데 사용할 수 있는 액세스 제어 유형입니다. 이것은 모든 프로그래밍 언어에 대해 하나의 코드라는 아이디어로 작성된 유형입니다.

표준 레이아웃 클래스에는 다음과 같은 기능이 있습니다. -

  • 가상 기능이나 가상 클래스가 없어야 합니다.
  • 모든 클래스에 대해 동일한 액세스 제어(공개, 비공개, 보호)가 있어야 합니다.
  • 비정적 데이터 유형이 없습니다.
  • 첫 번째 비정적 데이터 유형과 동일한 유형의 기본 클래스가 없습니다.

구문

template <class T>is_standard_layout;

매개변수

템플릿은 T 유형의 매개변수만 가질 수 있으며 T가 표준 레이아웃 유형인지 여부를 확인합니다.

반환 값

Boolean 값을 반환하고, 주어진 유형이 표준 레이아웃 유형이면 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