型の特徴のコンパイラ サポート (C++ コンポーネント拡張)
コンパイラ サポートにより、コンパイル時に型のさまざまな特性を示す 特徴を入力します。
すべてのランタイム
解説
型の特徴は、ライブラリを記述するプログラマに特に便利です。
次の表は、コンパイラによってサポートされる型の特徴を示します。 すべての型の特徴は型の特徴の名前で指定された条件を満たす false を返します。
(テーブルの説明列に、コード例は C++/CLIだけに書き込まれます。 それに対応する型の特徴は、Visual C++ コンポーネント拡張 で特に明記されていない限り、サポートされます。 用語は、プラットフォーム「型」 Windows ランタイム の型または共通言語ランタイム型を示します)。
型の特徴 |
説明 |
---|---|
__has_assign(type) |
プラットフォームにまたはネイティブ型はコピー代入演算子がある場合に true を返します。
|
__has_copy(type) |
プラットフォームにまたはネイティブ型でコピー コンストラクターがある場合は true を返します。
|
__has_finalizer(type) |
(Visual C++ コンポーネント拡張ではサポートされていません)。CLR 型にファイナライザーがある場合は true を返します。 詳細については、「Visual C++ のデストラクター、およびファイナライザー」を参照してください。
|
__has_nothrow_assign(type) |
コピー代入演算子が空の例外の指定がある場合は true を返します。
|
__has_nothrow_constructor(type) |
既定のコンストラクターは、空の例外の指定がある場合は true を返します。
|
__has_nothrow_copy(type) |
コピー コンストラクターは、空の例外の指定がある場合は true を返します。
|
__has_trivial_assign(type) |
型に自明な場合は true、コンパイラにより生成された代入演算子を返します。
|
__has_trivial_constructor(type) |
型に自明な場合は true、コンパイラにより生成されたコンストラクターを返します。
|
__has_trivial_copy(type) |
型に自明な場合は true、コンパイラが生成したコピー コンストラクターを返します。
|
__has_trivial_destructor(type) |
型に自明な場合は true、コンパイラにより生成されたデストラクターを返します。
|
__has_user_destructor(type) |
プラットフォームにまたはネイティブ型はユーザーが宣言したデストラクターがある場合は true を返します。
|
__has_virtual_destructor(type) |
型に仮想デストラクターがある場合は true を返します。 __has_virtual_destructor は、プラットフォームの種類で実行され、プラットフォームの種類のユーザー定義のデストラクターが仮想デストラクターです。
|
__is_abstract(type) |
型が抽象型である場合は true を返します。 ネイティブ抽象型の詳細については、「abstract (C++ コンポーネント拡張)」を参照してください。 __is_abstract は、プラットフォームの種類で使用できます。 1 つ以上のメンバーを持つインターフェイスは 1 以上の抽象メンバーを持つ参照型と同様に、抽象型です。 abstract プラットフォームの種類の詳細については、抽象クラス (C++)を参照します
|
__is_base_of(base, derived) |
型が同じ場合、一つ目の型が 2 番目の型の基本クラスの場合、true を返します。 __is_base_of は、プラットフォームの種類で実行されます。 たとえば、最初の型が インターフェイス クラス (C++ コンポーネント拡張) で、2 番目の型がインターフェイスを実装すれば true を返します。
|
__is_class(type) |
ネイティブ型がクラスまたは構造体である場合に true を返します。
|
__is_convertible_to(from, to) |
最初の型が 2 番目の型に変換できる場合は、TRUE を返します。
|
__is_delegate(type) |
type がデリゲートの場合、true を返します。 詳細については、「delegate (C++ コンポーネント拡張)」を参照してください。
|
__is_empty(type) |
型にインスタンス データ メンバーがない場合に true を返します。
|
__is_enum(type) |
型がネイティブな列挙型 (Enum) である場合に true を返します。
|
__is_interface_class(type) |
プラットフォーム渡られたらインターフェイスに true を返します。 詳細については、「インターフェイス クラス (C++ コンポーネント拡張)」を参照してください。
|
__is_pod(type) |
型がコンストラクターを持たないクラスまたは共用体またはプライベートまたは保護されたな非静的なメンバーは、基本クラスの仮想関数の場合、true を返します。 POD 型の詳細については、" C++ 標準、セクション 8.5.1/1、9/4、3.9/10 を参照してください。 __is_pod は 基本型に FALSE を返します。
|
__is_polymorphic(type) |
ネイティブ型に仮想関数がある場合は true を返します。
|
__is_ref_array(type) |
渡られたらプラットフォームの配列は true を返します。 詳細については、「配列 (C++ コンポーネント拡張)」を参照してください。
|
__is_ref_class(type) |
参照クラスに渡られたら true を返します。 ユーザー定義の参照型の詳細については、「クラスと構造体 (C++ コンポーネント拡張)」を参照してください。
|
__is_sealed(type) |
渡られたらプラットフォーム true を返すか、ネイティブ型はシールされて説明しました。 詳細については、「sealed (C++ コンポーネント拡張)」を参照してください。
|
__is_simple_value_class(type) |
ガベージ コレクション ヒープへの参照を含まない値型に渡られたら true を返します。 ユーザー定義の値型の詳細については、「クラスと構造体 (C++ コンポーネント拡張)」を参照してください。
|
__is_union(type) |
型が共用体である場合に true を返します。
|
__is_value_class(type) |
値型に渡られたら true を返します。 ユーザー定義の値型の詳細については、「クラスと構造体 (C++ コンポーネント拡張)」を参照してください。
|
Windows ランタイム
解説
__has_finalizer(type) の型の特徴は、このプラットフォームがファイナライザーをサポートしていないため、サポートされていません。
要件
コンパイラ オプション: /ZW
共通言語ランタイム
解説
(この機能のプラットフォーム固有の解説はありません。)
要件
コンパイラ オプション: /clr
例
例
次のコード例は /clr コンパイルのコンパイラ型の特徴を公開するときは、クラス テンプレートを使用する方法を示します。 詳細については、「Windows ランタイムおよびマネージ テンプレート (C++ コンポーネント拡張)」を参照してください。
// compiler_type_traits.cpp
// compile with: /clr
using namespace System;
template <class T>
ref struct is_class {
literal bool value = __is_ref_class(T);
};
ref class R {};
int main () {
if (is_class<R>::value)
Console::WriteLine("R is a ref class");
else
Console::WriteLine("R is not a ref class");
}
出力