Prise en charge du compilateur pour les Type Traits (extensions du composant C++)
Prend en charge de compilateur entrez les caractéristiques, qui indiquent différentes caractéristiques d'un type au moment de la compilation.
Tous les runtimes
Remarques
Les caractéristiques de type sont particulièrement utiles aux programmeurs qui écrivent des bibliothèques.
Le tableau suivant répertorie les caractéristiques de type qui sont prises en charge par le compilateur.Toutes les caractéristiques de type retournent false si la condition spécifiée en regard de le nom de la fonctionnalité de type n'est pas remplie.
(Dans la colonne description de la table, des exemples de code sont écrits uniquement dans C++/CLI.Mais la fonctionnalité correspondante de type est également prise en charge dans Extensions de composant Visual C++ sauf indication contraire.Le terme, « type de plateforme » fait référence aux types d' Windows Runtime ou à des types du common langage runtime.)
Trait de type |
Description |
---|---|
__has_assign(type) |
Retourne la valeur true si la plateforme ou le type natif a un opérateur d'assignation de copie.
|
__has_copy(type) |
Retourne la valeur true si la plateforme ou le type natif a un constructeur de copie.
|
__has_finalizer(type) |
(Non pris en charge dans Extensions de composant Visual C++.) Retourne la valeur true si le type CLR a un finaliseur.Consultez Destructeurs et les finaliseurs dans Visual C++ pour plus d'informations.
|
__has_nothrow_assign(type) |
Retourne la valeur true si un opérateur d'assignation de copie a une spécification vide d'exception.
|
__has_nothrow_constructor(type) |
Retourne la valeur true si le constructeur par défaut a une spécification vide d'exception.
|
__has_nothrow_copy(type) |
Retourne la valeur true si le constructeur de copie a une spécification vide d'exception.
|
__has_trivial_assign(type) |
Retourne la valeur true si le type possède un opérateur d'assignation simple et généré par le compilateur.
|
__has_trivial_constructor(type) |
Retourne la valeur true si le type possède un constructeur trivial et généré par le compilateur.
|
__has_trivial_copy(type) |
Retourne la valeur true si le type possède un constructeur de copie simple et généré par le compilateur.
|
__has_trivial_destructor(type) |
Retourne la valeur true si le type a un destructeur simple et généré par le compilateur.
|
__has_user_destructor(type) |
Retourne la valeur true si la plateforme ou le type natif a un destructeur utilisateur-déclaré.
|
__has_virtual_destructor(type) |
Retourne la valeur true si le type a un destructeur virtuel. __has_virtual_destructor fonctionne également sur les types de plateforme, et tout destructeur défini par l'utilisateur dans un type de plateforme est un destructeur virtuel.
|
__is_abstract(type) |
Retourne la valeur true si le type est un type abstrait.Pour plus d'informations sur les types abstract natif, consultez l' abstract (extensions du composant C++). __is_abstract fonctionne également pour les types de plateforme.Une interface avec au moins un membre est un type abstrait, ainsi qu'un type référence avec au moins un membre abstrait.Pour plus d'informations sur les types abstraits de plateforme, consultez l' Classes abstraites (C++)
|
__is_base_of(base,derived) |
Retourne la valeur true si le premier type est une classe de base du deuxième type, de si les deux types sont identiques. __is_base_of fonctionne également sur les types de plateforme.Par exemple, il retourne la valeur true si le premier type est classe d'interface (extensions du composant C++) et le second type implémente l'interface.
|
__is_class(type) |
Retourne la valeur true si le type est une classe ou une structure native.
|
__is_convertible_to(from, to) |
Retourne la valeur true si le premier type peut être converti au second type.
|
__is_delegate(type) |
Retourne la valeur true si type est un délégué.Pour plus d'informations, consultez déléguer (extensions du composant C++).
|
__is_empty(type) |
Retourne la valeur true si le type n'a aucune donnée membre d'instance.
|
__is_enum(type) |
Retourne la valeur true si le type est un enum natif.
|
__is_interface_class(type) |
Retourne la valeur true si passé une interface de plateforme.Pour plus d'informations, consultez classe d'interface (extensions du composant C++).
|
__is_pod(type) |
Retourne la valeur true si le type est une classe ou une union sans le constructeur ou les membres non statiques privés ou protégés, aucune classes de base, et les fonctions virtuelles.Consultez la norme C++, les sections 8.5.1/1, le 9/4, et les 3.9/10 pour plus d'informations sur les cosses. __is_pod retourne la valeur false sur les types fondamentaux.
|
__is_polymorphic(type) |
Retourne la valeur true si un type natif a des fonctions virtuelles.
|
__is_ref_array(type) |
Retourne la valeur true si passé un tableau de plateforme.Pour plus d'informations, consultez Tableaux (extensions du composant C++).
|
__is_ref_class(type) |
Retourne la valeur true si passe une classe de référence.Pour plus d'informations sur les types définis par l'utilisateur, consultez Classes et structs (extensions du composant C++).
|
__is_sealed(type) |
Retourne la valeur true si passé une plateforme ou un type natif marqué sealed.Pour plus d'informations, consultez sealed (extensions du composant C++).
|
__is_simple_value_class(type) |
Retourne la valeur true si passé un type valeur qui ne contient aucune référence vers le tas récupéré par le garbage collector.Pour plus d'informations sur les types valeur définis par l'utilisateur, consultez Classes et structs (extensions du composant C++).
|
__is_union(type) |
Retourne la valeur true si un type est une union.
|
__is_value_class(type) |
Retourne la valeur true si passé un type valeur.Pour plus d'informations sur les types valeur définis par l'utilisateur, consultez Classes et structs (extensions du composant C++).
|
Windows Runtime
Remarques
La fonctionnalité de type d' __has_finalizer(type) n'est pas prise en charge car cette plateforme ne prend pas en charge les finaliseurs.
Configuration requise
Option du compilateur : /ZW
Common Language Runtime
Remarques
(Il n'y a aucune note en plateforme spécifique pour cette fonctionnalité.)
Configuration requise
Option du compilateur : /clr
Exemples
Exemple
L'exemple de code suivant montre comment utiliser un modèle de classe pour exposer un trait de type de compilateur pour une compilation d' /clr .Pour plus d'informations, consultez Windows Runtime et modèles gérés (extensions du composant 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");
}
Sortie