typeid (C++/CLI et C++/CX)
Obtient une valeur qui indique le type d’un objet.
Remarque
Cette rubrique fait référence à la version des extensions de composant de typeid. Pour la version ISO C++ de ce mot clé, consultez Opérateur typeid.
Tous les runtimes
Syntaxe
T::typeid
Paramètres
T
Un nom de type.
Windows Runtime
Syntaxe
Platform::Type^ type = T::typeid;
Paramètres
T
Un nom de type.
Notes
Dans C++/CX, typeid retourne une classe Platform::Type qui est construite à partir des informations sur le type de runtime.
Spécifications
Option du compilateur : /ZW
Common Language Runtime
Syntaxe
System::Type^ type = T::typeid;
Paramètres
type
Le nom d’un type (déclarateur abstrait) dont vous souhaitez l’objet System::Type
.
Notes
typeid
est utilisé pour obtenir le Type d’un type au moment de la compilation.
typeid
est similaire à l’obtention d’un System::Type
type au moment de l’exécution à l’aide GetType ou GetType. Toutefois, typeid
accepte uniquement un nom de type en tant que paramètre. Si vous souhaitez utiliser une instance d’un type pour obtenir son System::Type
nom, utilisez GetType
.
typeid
doit pouvoir évaluer un nom de type (type) au moment de la compilation, tandis que GetType évalue le type à retourner au moment de l’exécution.
typeid
peut prendre un nom de type natif ou un alias de runtime langage commun pour le nom de type natif. Consultez Équivalents .NET Framework des types natifs C++ (C++-CLI) pour plus d’informations.
typeid
fonctionne également avec des types natifs, bien qu’il retourne toujours un System::Type
. Pour obtenir une structure type_info, utilisez typeid
l’opérateur.
Spécifications
Option du compilateur : /clr
Exemples
L’exemple suivant compare le mot clé typeid au membre GetType()
.
// keyword__typeid.cpp
// compile with: /clr
using namespace System;
ref struct G {
int i;
};
int main() {
G ^ pG = gcnew G;
Type ^ pType = pG->GetType();
Type ^ pType2 = G::typeid;
if (pType == pType2)
Console::WriteLine("typeid and GetType returned the same System::Type");
Console::WriteLine(G::typeid);
typedef float* FloatPtr;
Console::WriteLine(FloatPtr::typeid);
}
typeid and GetType returned the same System::Type
G
System.Single*
L’exemple suivant montre qu’une variable de type System::type peut être utilisée pour obtenir les attributs sur un type. Il montre également que pour certains types, vous devez créer un typedef pour utiliser typeid
.
// keyword__typeid_2.cpp
// compile with: /clr
using namespace System;
using namespace System::Security;
using namespace System::Security::Permissions;
typedef int ^ handle_to_int;
typedef int * pointer_to_int;
public ref class MyClass {};
class MyClass2 {};
[attribute(AttributeTargets::All)]
ref class AtClass {
public:
AtClass(Type ^) {
Console::WriteLine("in AtClass Type ^ constructor");
}
};
[attribute(AttributeTargets::All)]
ref class AtClass2 {
public:
AtClass2() {
Console::WriteLine("in AtClass2 constructor");
}
};
// Apply the AtClass and AtClass2 attributes to class B
[AtClass(MyClass::typeid), AtClass2]
[AttributeUsage(AttributeTargets::All)]
ref class B : Attribute {};
int main() {
Type ^ MyType = B::typeid;
Console::WriteLine(MyType->IsClass);
array<Object^>^ MyArray = MyType -> GetCustomAttributes(true);
for (int i = 0 ; i < MyArray->Length ; i++ )
Console::WriteLine(MyArray[i]);
if (int::typeid != pointer_to_int::typeid)
Console::WriteLine("int::typeid != pointer_to_int::typeid, as expected");
if (int::typeid == handle_to_int::typeid)
Console::WriteLine("int::typeid == handle_to_int::typeid, as expected");
}
True
in AtClass2 constructor
in AtClass Type ^ constructor
AtClass2
System.AttributeUsageAttribute
AtClass
int::typeid != pointer_to_int::typeid, as expected
int::typeid == handle_to_int::typeid, as expected