Compilerunterstützung für Typmerkmale (Komponentenerweiterungen für C++)
Die Compilerunterstützung gibt Merkmalen ein, die unterschiedliche Eigenschaften eines Typs zur Kompilierzeit angeben.
Alle Laufzeiten
Hinweise
Programmierer Typmerkmale sind besonders nützlich, die Bibliotheken schreiben.
Die folgende Tabelle zeigt die Typmerkmale auf, die vom Compiler unterstützt werden. Alle Typmerkmale geben false zurück, wenn die Bedingung, die mit dem Namen des Typmerkmal angegeben ist, nicht erfüllt ist.
(In der Spalte der Tabelle, Codebeispiele werden nur in C++/CLI geschrieben. Wenn das entsprechende Typmerkmal wird auch in Komponentenerweiterungen für Visual C++ falls nicht anders angegeben unterstützt. Der Begriff, "Plattformtyp" verweist entweder Typen oder Windows-Runtime Common Language Runtime verwendet werden.) an
Typ-Merkmal |
Beschreibung |
---|---|
__has_assign(type) |
Gibt true zurück, wenn die Plattform oder der systemeigene Typ ein Kopierzuweisungsoperator hat.
|
__has_copy(type) |
Gibt true zurück, wenn die Plattform oder der systemeigenen Typ einen Kopierkonstruktor ist.
|
__has_finalizer(type) |
(Nicht unterstützt in Komponentenerweiterungen für Visual C++.) Gibt true zurück, wenn der CLR-Typ einen Finalizer hat. Weitere Informationen finden Sie unter Destruktoren und Finalizer in Visual C++.
|
__has_nothrow_assign(type) |
Gibt true zurück, wenn ein Kopierzuweisungsoperator eine leere Ausnahmespezifikation hat.
|
__has_nothrow_constructor(type) |
Gibt true zurück, wenn der Standardkonstruktor eine leere Ausnahmespezifikation hat.
|
__has_nothrow_copy(type) |
Gibt true zurück, wenn der Kopierkonstruktor eine leere Ausnahmespezifikation hat.
|
__has_trivial_assign(type) |
Gibt true zurück, wenn der Typ einen trivialen, vom Compiler generierten Zuweisungsoperator verfügt.
|
__has_trivial_constructor(type) |
Gibt true zurück, wenn der Typ einen trivialen, vom Compiler generierten Konstruktor verfügt.
|
__has_trivial_copy(type) |
Gibt true zurück, wenn der Typ einen trivialen, vom Compiler generierten Kopierkonstruktor ist.
|
__has_trivial_destructor(type) |
Gibt true zurück, wenn der Typ einen trivialen, vom Compiler generierten Destruktor enthält.
|
__has_user_destructor(type) |
Gibt true zurück, wenn die Plattform oder der systemeigene Benutzer-deklarierten Typ einen Destruktor enthält.
|
__has_virtual_destructor(type) |
Gibt true zurück, wenn der Typ einen virtuellen Destruktor verfügt. __has_virtual_destructor kann auch an Plattformtypen, und jede benutzerdefinierte Destruktor in einem Plattformtyp ist ein virtueller Destruktor.
|
__is_abstract(type) |
Gibt true zurück, wenn der Typ vom Typ abstract ist. Weitere Informationen zu systemeigenen abstrakte Typen, finden Sie unter abstract (Komponentenerweiterungen für C++). __is_abstract kann auch für Plattformtypen. Eine Schnittstelle mit mindestens einköpfigem ist ein abstrakter Typ, z ein Referenztyp mit mindestens einen abstrakten Member. Weitere Informationen zu abstrakten Plattformtypen, finden Sie unter Abstrakte Klassen (C++)
|
__is_base_of(base, derived) |
Gibt true zurück, wenn der erste Typ eine Basisklasse zweite Typ ist, aus, wenn beide Typen gleich sind. __is_base_of kann auch an Plattformtypen. Beispielsweise wird true zurück, wenn der erste Typ interface class (Komponentenerweiterungen für C++) handelt und der zweite Typ die Schnittstelle implementiert.
|
__is_class(type) |
Gibt true zurück, wenn der Typ eine systemeigene Klasse oder Struktur handelt.
|
__is_convertible_to(from, to) |
Gibt true zurück, wenn der erste Typ auf den zweiten Typ konvertiert werden kann.
|
__is_delegate(type) |
Gibt true zurück, wenn type ein Delegat ist. Weitere Informationen finden Sie unter delegate (Komponentenerweiterungen für C++).
|
__is_empty(type) |
Gibt true zurück, wenn der Typ keine Instanzdatenmember hat.
|
__is_enum(type) |
Gibt true zurück, wenn der Typ eine systemeigene Enumeration ist.
|
__is_interface_class(type) |
Gibt true zurück, wenn sie einer Plattformschnittstelle übergeben wird. Weitere Informationen finden Sie unter interface class (Komponentenerweiterungen für C++).
|
__is_pod(type) |
Gibt true zurück, wenn der Typ eine Klasse oder Union ohne Konstruktor oder private oder geschützte nicht statische Member, keine Basisklassen und keine virtuellen Funktionen ist. Siehe den C++-Standard, die Abschnitte 8.5.1/1, das 9/4 und die 3.9/10 weitere Informationen zu Hülsen. __is_pod Gibt false über grundlegende Typen zurück.
|
__is_polymorphic(type) |
Gibt true zurück, wenn ein systemeigener Typ virtuelle Funktionen verfügt.
|
__is_ref_array(type) |
Gibt true zurück, wenn ein Plattformarray übergeben wird. Weitere Informationen finden Sie unter Arrays (Komponentenerweiterungen für C++).
|
__is_ref_class(type) |
Gibt true zurück, wenn sie einer Verweisklasse übergeben wird. Weitere Informationen zu benutzerdefinierten Verweistypen, finden Sie unter Klassen und Strukturen (Komponentenerweiterungen für C++).
|
__is_sealed(type) |
Gibt true zurück, wenn sie einer Plattform oder einem systemeigenen Typ übergeben wird, die diese versiegelt gekennzeichnet ist. Weitere Informationen finden Sie unter sealed (Komponentenerweiterungen für C++).
|
__is_simple_value_class(type) |
Gibt true zurück, wenn sie einem Werttyp übergeben wird, der keine Verweise auf dem Heap der Garbage Collection enthält. Weitere Informationen zu benutzerdefinierten Werttypen, finden Sie unter Klassen und Strukturen (Komponentenerweiterungen für C++).
|
__is_union(type) |
Gibt true zurück, wenn ein Typ Union ist.
|
__is_value_class(type) |
Gibt true zurück, wenn sie einem Werttyp übergeben wird. Weitere Informationen zu benutzerdefinierten Werttypen, finden Sie unter Klassen und Strukturen (Komponentenerweiterungen für C++).
|
Windows-Runtime
Hinweise
Das Typmerkmal __has_finalizer(type) wird nicht unterstützt, da diese Plattform Finalizer nicht unterstützt.
Voraussetzungen
Compileroption: /ZW
Common Language Runtime
Hinweise
(Es gibt keine plattformspezifischen Hinweise für diese Funktion.)
Voraussetzungen
Compileroption: /clr
Beispiele
Beispiel
Das folgende Codebeispiel zeigt, wie eine Klassenvorlage verwendet, um ein für eine /clr Compilertypmerkmal Kompilierung verfügbar zu machen. Weitere Informationen finden Sie unter Windows-Laufzeit und verwaltete Vorlagen (Komponentenerweiterungen für 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");
}
Ausgabe