Partage via


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

Voir aussi

Extensions de composants pour .NET et UWP