typeid
Obtient une valeur indiquant le type d'un objet.
Avertissement
Cette rubrique fait référence à la version de composant d'extensions C++ du typeid.Pour obtenir la version ISO C++ de ce mot clé, consultez typeid, opérateur.
Tous les runtimes
Syntaxe
T::typeid
Paramètres
- T
Nom de type.
Windows Runtime
Syntaxe
Platform::Type^ type = T::typeid;
Paramètres
- T
Nom de type.
Remarques
Dans C++/CX, le typeid retourne un Platform::Type qui est construit à partir d'informations de type runtime.
Configuration requise
Option du compilateur : /ZW
Common Language Runtime
Syntaxe
type::typeid
Paramètres
- type
Le nom d'un type (déclarateur abstrait) pour lequel vous souhaitez l'objet System::Type.
Remarques
typeid est utilisé pour obtenir le Type d'un type au moment de la compilation.
typeid est semblable à l'obtention du System::Type d'un type au moment de l'exécution à l'aide de GetType ou de GetType. Toutefois, typeid accepte un seul nom de type en tant que paramètre. Si vous voulez utiliser une instance de type pour obtenir son nom de System::Type, utilisez GetType.
typeid doit pouvoir évaluer un nom de type (type) au moment de la compilation, alors que GetType évalue le type à retourner au moment de l'exécution.
typeid peut prendre un nom de type natif ou un alias Common Language Runtime du nom de type natif ; consultez Équivalents .NET Framework des types natifs C++ (C++/CLI) pour plus d'informations.
typeid fonctionne également avec les types natifs, même s'il retournera toujours un System::Type. Pour obtenir une structure type_info, utilisez typeid, opérateur.
typeid succède à __typeof dans la syntaxe /clr précédente.
Configuration requise
Option du compilateur : /clr
Exemples
Exemple
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);
}
Sortie
Exemple
L'exemple suivant indique qu'une variable de type System::Type peut être utilisée pour obtenir les attributs d'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");
}
Sortie