C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++のis_abstractテンプレート


この記事では、C++STLでのstd::is_abstractテンプレートの動作、構文、および例について説明します。

Is_abstractテンプレートは、クラスが抽象クラスであるかどうかを確認するのに役立ちます。

抽象クラスとは何ですか?

抽象クラスは、少なくとも1つの純粋仮想関数を持つクラスです。抽象クラスを使用するのは、関数を定義するときにその実装がわからないためです。したがって、クラスの関数がさらに何をするのかわからない場合に非常に役立ちますが、私たちのシステムではこのような関数でなければなりません。したがって、宣言されただけで、その関数の実装がない純粋仮想関数を宣言します。

したがって、クラスのインスタンスからクラスが抽象クラスであるかどうかを確認する場合は、is_abstract()を使用します。

is_abstract()はitegral_constantから継承され、クラスTのインスタンスがポリモーフィッククラスタイプであるかどうかに応じて、true_typeまたはfalse_typeを提供します。

構文

template <class T> struct is_abstract;

パラメータ

このテンプレートには、クラスTiが抽象クラスであるかどうかを確認するためのクラスタイプのパラメータTを1つだけ含めることができます。

戻り値

この関数は、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

  1. C++での構造とクラス

    C ++では、構造とクラスは基本的に同じです。しかし、いくつかの小さな違いがあります。これらの違いは以下のようなものです。 クラスメンバーはデフォルトでプライベートですが、構造体のメンバーはパブリックです。違いを確認するために、これら2つのコードを見てみましょう。 サンプルコード #include <iostream> using namespace std; class my_class {    int x = 10; }; int main() {    my_class my_ob;    cout <&l

  2. C++のローカルクラス

    関数内で宣言されたクラスは、その関数に対してローカルであるため、C++ではローカルクラスと呼ばれます。 ローカルクラスの例を以下に示します。 #include<iostream> using namespace std; void func() {    class LocalClass {    }; } int main() {    return 0; } 上記の例では、func()は関数であり、クラスLocalClassは関数内で定義されています。したがって、ローカルクラスとして知られています。 ローカルクラ