Compilerunterstützung für Typmerkmale (Komponentenerweiterungen für C++)
Der Compiler unterstützt Typmerkmale, die verschiedene Eigenschaften eines Typs zur Kompilierungszeit angeben.
Alle Laufzeiten
Hinweise
Typmerkmale sind Programmierer hilfreich, die Bibliotheken schreiben.
In der folgenden Tabelle werden die Typmerkmale aufgeführt, die vom Compiler unterstützt werden.Alle Typmerkmale geben false zurück, wenn die Bedingung, die durch den Namen des Typmerkmal angegeben ist, nicht erfüllt wird.
(In der Spalte Beschreibung der Tabelle werden nur Codebeispiele in C++/CLI geschrieben.Das entsprechende Typmerkmal wird auch in Komponentenerweiterungen für Visual C++ sofern nicht anders angegeben.Der Begriff "Typ" Plattform entweder auf Typen oder Windows-Runtime Common Language Runtime) an.
Typ-Merkmal |
Beschreibung |
---|---|
__has_assign(type) |
Gibt true zurück, wenn die Plattform oder der systemeigene Typ einen Kopierzuweisungsoperator verfügt.
|
__has_copy(type) |
Gibt true zurück, wenn die Plattform oder der systemeigene Typ über einen Kopierkonstruktor verfügt.
|
__has_finalizer(type) |
(Wird nicht 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 ist.
|
__has_nothrow_constructor(type) |
Gibt true zurück, wenn der Standardkonstruktor eine leere Ausnahmespezifikation ist.
|
__has_nothrow_copy(type) |
Gibt true zurück, wenn der Kopierkonstruktor eine leere Ausnahmespezifikation ist.
|
__has_trivial_assign(type) |
Gibt true zurück, wenn der Typ über einen trivialen, vom Compiler generierten Zuweisungsoperator verfügt.
|
__has_trivial_constructor(type) |
Gibt true zurück, wenn der Typ über einen trivialen, vom Compiler generierten Standardkonstruktor verfügt.
|
__has_trivial_copy(type) |
Gibt true zurück, wenn der Typ über einen trivialen, vom Compiler generierten Kopierkonstruktor verfügt.
|
__has_trivial_destructor(type) |
Gibt true zurück, wenn der Typ über einen trivialen Destruktor vom Compiler generiert hat.
|
__has_user_destructor(type) |
Gibt true zurück, wenn die Plattform oder der systemeigene Typ USER-deklarierten einen Destruktor verfügt.
|
__has_virtual_destructor(type) |
Gibt true zurück, wenn der Typ über einen virtuellen Destruktor verfügt. __has_virtual_destructor funktioniert auch auf Plattform, und jeder benutzerdefinierte Typen in einem Destruktor Typ von Plattform ist ein virtueller Destruktor.
|
__is_abstract(type) |
Gibt true zurück, wenn der Typ ein abstrakter Typ ist.Weitere Informationen zu systemeigenen abstrakte Typen finden Sie unter abstract (Komponentenerweiterungen für C++). __is_abstract funktioniert auch für Plattform Typen.Eine Schnittstelle mit mindestens einköpfigem ist ein abstrakter Typ, z. B. ein Verweistyp mit mindestens einem abstrakten Member.Weitere Informationen zu abstrakten Typen finden Sie unter Abstrakte Klassen (C++) Plattform
|
__is_base_of(base,derived) |
Gibt true zurück, wenn der erste Typ eine Basisklasse zweite Typ ist, der zurück, wenn beide Typen gleich sind. __is_base_of funktioniert auch Plattform Typen.Beispielsweise gibt er true zurück, wenn der erste Typ interface class (Komponentenerweiterungen für C++) ist und der zweite Typ die Schnittstelle implementiert.
|
__is_class(type) |
Gibt true zurück, wenn der Typ einer systemeigenen Klasse oder eine Struktur ist.
|
__is_convertible_to(from, to) |
Gibt true zurück, wenn der erste Typ für 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 Instanzdaten Member verfügt.
|
__is_enum(type) |
Gibt true zurück, wenn der Typ eine systemeigene Enumeration vorhanden ist.
|
__is_interface_class(type) |
Gibt true zurück, wenn Sie einer Plattform Oberfläche übergeben werden.Weitere Informationen finden Sie unter interface class (Komponentenerweiterungen für C++).
|
__is_pod(type) |
Gibt true zurück, wenn der Typ eine Klasse oder eine Union ohne Konstruktor oder private oder geschützte nicht statischen 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 Informationen zu Hülsen. __is_pod auf einfachen Typen gibt false 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 Sie ein Zeichenfolgenarray Plattform übergeben werden.Weitere Informationen finden Sie unter Arrays (Komponentenerweiterungen für C++).
|
__is_ref_class(type) |
Gibt true zurück, wenn Sie einer Verweisklasse übergeben werden.Weitere Informationen zu benutzerdefinierten Referenztypen 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 werden, die sealed gekennzeichnet ist.Weitere Informationen finden Sie unter sealed (Komponentenerweiterungen für C++).
|
__is_simple_value_class(type) |
Gibt true zurück, wenn Sie einen Werttyp übergeben werden, der keine Verweise auf den Heap der Garbage Collection enthält.Weitere Informationen zu benutzerdefinierten Werttypen finden Sie Klassen und Strukturen (Komponentenerweiterungen für C++).
|
__is_union(type) |
Gibt true zurück, wenn ein Typ eine Union ist.
|
__is_value_class(type) |
Gibt true zurück, wenn Sie einen Werttyp übergeben werden.Weitere Informationen zu benutzerdefinierten Werttypen finden Sie Klassen und Strukturen (Komponentenerweiterungen für C++).
|
Windows-Runtime
Hinweise
Das __has_finalizer(-Typ )-Typmerkmal wird nicht unterstützt, da diese Plattform Finalizer nicht unterstützt.
Anforderungen
Compileroption: /ZW
Common Language Runtime
Hinweise
(Es gibt keine plattformspezifische Hinweise für diese Funktion.)
Anforderungen
Compileroption: /clr
Beispiele
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie eine Klassenvorlage verwendet, um ein Compilertyp merkmal für eine /clr 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");
}
Output