이 기사에서는 C++ STL에서 std::is_standard_layout 템플릿의 작동, 구문 및 예에 대해 논의할 것입니다.
is_standard_layout은
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