Obsługa cech typu w kompilatorze (C++ Component Extensions)
Obsługuje kompilatora typu cech, które wskazują różne cechy typu w czasie kompilacji.
Wszystkich modułów wykonawczych.
Uwagi
Cechy typu są szczególnie użyteczne dla programistów piszących bibliotek.
Poniższa tabela zawiera listę cech typu, które są obsługiwane przez kompilator.Wpisz wszystkie cechy return false , jeśli nie jest spełniony warunek określony przez nazwę cechy typu.
(W kolumnie Opis w tabeli przykłady kodu są zapisywane tylko w C++/CLI.Jednak odpowiednie cechy typu jest również obsługiwany w Rozszerzenia składników dla programu Visual C++ , chyba że stwierdzono inaczej.Termin "typ" odnosi się do albo Środowisko wykonawcze systemu Windows typów lub wspólne language runtime.)
Cechy typu |
Opis |
---|---|
__has_assign(type) |
Zwraca wartość true, jeśli operator przypisania kopii platformy lub typu macierzystego.
|
__has_copy(type) |
Zwraca wartość true, jeśli platformy lub typ macierzysty ma konstruktora kopii.
|
__has_finalizer(type) |
(Nie obsługiwane w Rozszerzenia składników dla programu Visual C++.) Zwraca wartość true, jeśli typ CLR finalizatorów.Zobacz Destruktory i finalizatorów w programie Visual C++ Aby uzyskać więcej informacji.
|
__has_nothrow_assign(type) |
Zwraca wartość true, jeśli operator przypisania kopia ma specyfikacja pusty wyjątek.
|
__has_nothrow_constructor(type) |
Zwraca wartość true, jeśli Specyfikacja wyjątku pustego konstruktora domyślnego.
|
__has_nothrow_copy(type) |
Zwraca wartość true, jeśli Konstruktor kopia ma specyfikacja pusty wyjątek.
|
__has_trivial_assign(type) |
Zwraca wartość true, jeśli typ jest operatorem przypisania trivial, generowanych przez kompilator.
|
__has_trivial_constructor(type) |
Zwraca wartość true, jeśli typ jest trywialny, generowanych przez kompilator konstruktora.
|
__has_trivial_copy(type) |
Zwraca wartość true, jeśli typ jest trywialny, generowanych przez kompilator kopiujący.
|
__has_trivial_destructor(type) |
Zwraca wartość true, jeśli typ jest trywialny, generowanych przez kompilator destruktor.
|
__has_user_destructor(type) |
Zwraca wartość true, jeśli platformy lub typ macierzysty ma destruktora zgłoszone przez użytkowników.
|
__has_virtual_destructor(type) |
Zwraca wartość true, jeśli typ jest wirtualny destruktor. __has_virtual_destructorworks na typy platformy i wszelkie destruktora zdefiniowane przez użytkownika w polu Typ platformy jest również wirtualnego destruktor.
|
__is_abstract(type) |
Zwraca wartość true, jeśli typ jest abstrakcyjny typ.Aby uzyskać więcej informacji na typy abstrakcyjne macierzystych, zobacz abstract (C++ Component Extensions). __is_abstractdziała również dla platformy typy.Interfejs z co najmniej jeden członek jest typu abstract, podobnie jak typ odwołania z co najmniej jednego członka abstrakcyjny.Aby uzyskać więcej informacji na typy abstrakcyjne platformy zobaczKlasy abstrakcyjne (C++)
|
__is_base_of(base,derived) |
Zwraca wartość true, jeśli pierwszy typ jest klasą bazową drugiego typu, jeśli oba typy są takie same. __is_base_ofdziała również w typach platformy.Na przykład, zostanie zwrócona wartość true, jeśli pierwszy typ jest interface class (C++ Component Extensions) i drugi typ implementuje interfejs.
|
__is_class(type) |
Zwraca wartość true, jeśli typem jest macierzystym klasy lub struktury.
|
__is_convertible_to(from, to) |
Zwraca wartość true, jeśli pierwszy typ można przekonwertować typu drugiego.
|
__is_delegate(type) |
Zwraca wartość PRAWDA, jeśli type jest pełnomocnika.Aby uzyskać więcej informacji, zobacz delegate (C++ Component Extensions).
|
__is_empty(type) |
Zwraca wartość true, jeśli typ nie ma wystąpienia danych członków.
|
__is_enum(type) |
Zwraca wartość true, jeśli typem jest macierzystym enum.
|
__is_interface_class(type) |
Zwraca wartość true, jeśli przekazany interfejs platformy.Aby uzyskać więcej informacji, zobacz interface class (C++ Component Extensions).
|
__is_pod(type) |
Zwraca wartość true, jeśli typem jest klasa lub Unii nie konstruktora lub członków-statycznej prywatnym ani chronionym nie klas podstawowych i nie funkcje wirtualnych.Zobacz strączki C++ standardowych, sekcje 8.5.1/1, 9 i 4 oraz 3.9/10, aby uzyskać więcej informacji. __is_podZwraca wartość false w typach podstawowych.
|
__is_polymorphic(type) |
Zwraca wartość true, jeśli typ macierzysty ma funkcje wirtualnych.
|
__is_ref_array(type) |
Zwraca wartość true, jeśli przekazany tablicy platformy.Aby uzyskać więcej informacji, zobacz Tablice (C++ Component Extensions).
|
__is_ref_class(type) |
Zwraca wartość true, jeśli przekazany klasy odniesienia.Aby uzyskać więcej informacji na temat typów zdefiniowanych przez użytkownika odwołania zobacz Klasy i struktury (C++ Component Extensions).
|
__is_sealed(type) |
Zwraca wartość true, jeśli przekazany platformy lub typ macierzysty oznaczony zamkniętych.Aby uzyskać więcej informacji, zobacz sealed (C++ Component Extensions).
|
__is_simple_value_class(type) |
Zwraca wartość true, jeśli przekazany typ wartości zawiera nie odwołań do sterty zebrane garbage.Aby uzyskać więcej informacji na temat typów zdefiniowanych przez użytkownika wartości, zobacz Klasy i struktury (C++ Component Extensions).
|
__is_union(type) |
Zwraca wartość true, jeśli typ jest Unii.
|
__is_value_class(type) |
Zwraca wartość true, jeśli przekazany typ wartości.Aby uzyskać więcej informacji na temat typów zdefiniowanych przez użytkownika wartości, zobacz Klasy i struktury (C++ Component Extensions).
|
Środowisko wykonawcze systemu Windows
Uwagi
__has_finalizer(Typu) cechy typu nie jest obsługiwany, ponieważ ta platforma nie obsługuje finalizatorów.
Wymagania
Opcja kompilatora:/ZW
Środowisko uruchomieniowe języka wspólnego
Uwagi
(Nie są żadne uwagi platformy dla tej funkcji).
Wymagania
Opcja kompilatora:/clr
Przykłady
Przykład
Poniższy przykład kodu pokazuje, jak używać szablonu klasy narazić cechy typu kompilatora dla /clr kompilacji.Aby uzyskać więcej informacji, zobacz Środowisko wykonawcze systemu Windows i zarządzane szablony (C++ Component Extensions).
// 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");
}
Dane wyjściowe