이 기사에서는 C++ STL에서 std::is_abstract 템플릿의 작동, 구문 및 예제에 대해 논의할 것입니다.
Is_abstract 템플릿은 클래스가 추상 클래스인지 여부를 확인하는 데 도움이 됩니다.
추상 클래스란 무엇입니까?
추상 클래스는 하나 이상의 순수 가상 기능이 있는 클래스입니다. 우리가 추상 클래스를 사용하는 이유는 우리가 함수를 정의할 때 그 구현을 모르기 때문에 클래스의 함수가 더 이상 무엇을 해야 하는지 알지 못하지만 거기에 있다고 확신하는 경우에 매우 유용합니다. 우리 시스템에서 이와 같은 기능이어야 합니다. 그래서 우리는 선언만 하고 그 함수의 구현은 없는 순수 가상 함수를 선언합니다.
따라서 클래스의 인스턴스에서 해당 클래스가 Abstract 클래스인지 여부를 확인하려면 is_abstract()를 사용합니다.
is_abstract()는 itegral_constant에서 상속되며 클래스 T의 인스턴스가 다형성 클래스 유형인지 여부에 따라 true_type 또는 false_type을 제공합니다.
구문
template <class T> struct is_abstract;
매개변수
이 템플릿은 T 클래스가 추상 클래스인지 여부를 확인하기 위한 클래스 유형의 매개변수 T 하나만 가질 수 있습니다.
반환 값
이 함수는 bool 유형 값, true 또는 false를 반환합니다.
T가 추상 클래스이면 true를 반환하고 T가 추상 클래스가 아니면 false를 반환합니다.
예시
#include <iostream> #include <type_traits> using namespace std; struct TP_1 { int var; }; struct TP_2 { virtual void dummy() = 0; }; class TP_3 : TP_2 { }; int main() { cout << boolalpha; cout << "checking for is_abstract: "; cout << "\nstructure TP_1 with one variable :"<< is_abstract<TP_1>::value; cout << "\nstructure TP_2 with one virtual variable : "<< is_abstract<TP_2>::value; cout << "\nclass TP_3 which is derived from TP_2 structure : "<< is_abstract<TP_3>::value; return 0; }
출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
checking for is_abstract: structure TP_1 with one variable : false structure TP_2 with one virtual variable : true class TP_3 which is derived from TP_2 structure : true
예시
#include <iostream> #include <type_traits> using namespace std; struct TP_1 { virtual void dummy() = 0; }; class TP_2 { virtual void dummy() = 0; }; struct TP_3 : TP_2 { }; int main() { cout << boolalpha; cout << "checking for is_abstract: "; cout << "\nstructure TP_1 with one virtual function :"<< is_abstract<TP_1>::value; cout << "\nclass TP_2 with one virtual function : "<< is_abstract<TP_2>::value; cout << "\nstructure TP_3 which is derived from TP_2 class : "<< is_abstract<TP_3>::value; return 0; }
출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
checking for is_abstract: structure TP_1 with one virtual function : true class TP_2 with one virtual function : true structure TP_3 which is derived from TP_2 class : true