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

C++의 is_abstract 템플릿

<시간/>

이 기사에서는 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