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

C++のis_standard_layoutテンプレート


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

is_standard_layoutは、ヘッダーファイルの下にあるテンプレートです。このテンプレートは、指定されたタイプTが標準レイアウトであるかどうかを確認するために使用されます。

C ++の標準レイアウトとは何ですか?

標準レイアウトタイプは、単純な線形構造(配列で見られるような)と、他のプログラミング言語で記述されたプログラムとの通信に簡単に使用できるアクセス制御を備えたタイプです。これは、すべてのプログラミング言語に対して1つのコードという考えで書かれたタイプです。

標準レイアウトクラスには次の機能があります-

  • 仮想関数または仮想クラスを持たないものとします。
  • すべてのクラスで同じアクセス制御(パブリック、プライベート、保護)が必要です。
  • 非静的データ型はありません。
  • 最初の非静的データ型と同じ型の基本クラスはありません。

構文

template <class T>is_standard_layout;

パラメータ

テンプレートにはタイプTのパラメータのみを含めることができ、Tが標準のレイアウトタイプであるかどうかを確認します。

戻り値

ブール値を返します。指定されたタイプが標準レイアウトタイプの場合は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

  1. C++でのテンプレートの特殊化

    C ++では、テンプレートを使用して一般化された関数とクラスを作成します。したがって、int、char、floatなどの任意のタイプのデータ、またはテンプレートを使用するユーザー定義データを使用できます。 このセクションでは、テンプレートの特殊化の使用方法を説明します。これで、さまざまなタイプのデータ用に一般化されたテンプレートを定義できます。そして、特別なタイプのデータのためのいくつかの特別なテンプレート関数。より良いアイデアを得るためにいくつかの例を見てみましょう。 サンプルコード #include<iostream> using namespace std; templat

  2. C++でのテンプレートメタプログラミング

    テンプレートを使用してコンパイル時に計算を行うプログラムを作成する場合、これはテンプレートメタプログラミングと呼ばれます。 サンプルコード #include <iostream> using namespace std; template<int n>struct power {    enum { value = 4*power<n-1>::value }; }; template<>struct power<0> {    enum { value = 1 }; }; int main