Condividi tramite


typeid (C++/CLI e C++/CX)

Ottiene un valore che indica il tipo di un oggetto.

Nota

In questo argomento viene fatto riferimento alla versione Estensioni componenti C++ di typeid. Per la versione C++ ISO di questa parola chiave, vedere Operatore typeid.

Tutti i runtime

Sintassi

T::typeid

Parametri

T
Un nome di tipo.

Windows Runtime

Sintassi

Platform::Type^ type = T::typeid;

Parametri

T
Un nome di tipo.

Osservazioni:

In C++/CX typeid restituisce un oggetto Platform::Type costruito dalle informazioni sul tipo di runtime.

Requisiti

Opzione del compilatore: /ZW

Common Language Runtime

Sintassi

System::Type^ type = T::typeid;

Parametri

type
Nome di un tipo (dichiaratore astratto) per il quale si vuole ottenere l'oggetto System::Type.

Osservazioni:

typeid si usa per ottenere l'oggetto Type per un tipo in fase di compilazione.

typeid è simile al recupero di System::Type per un tipo in fase di esecuzione tramite GetType o GetType. Tuttavia, typeid accetta solo un nome di tipo come parametro. Se si vuole usare un'istanza di un tipo per ottenere il nome System::Type , usare GetType.

typeid deve essere in grado di valutare un nome di tipo (type) in fase di compilazione, mentre GetType valuta il tipo da restituire in fase di esecuzione.

typeid può accettare un nome di tipo nativo o un alias di Common Language Runtime per il nome di tipo nativo. Per altre informazioni, vedere Equivalenti di .NET Framework a tipi nativi C++ (C++/CLI).

typeid funziona anche con i tipi nativi, anche se restituirà comunque un oggetto System::Type. Per ottenere una struttura type_info, usare typeid Operator.

Requisiti

Opzione del compilatore: /clr

Esempi

L'esempio seguente confronta la parola chiave typeid con il membro 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'esempio seguente mostra che una variabile di tipo System::Type può essere usata per ottenere gli attributi in un tipo. Illustra anche che per alcuni tipi è necessario creare un oggetto typedef per usare 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

Vedi anche

Estensioni componenti per .NET e UWP