Condividi tramite


typeid (Estensioni del componente C++)

Ottiene un valore che indica il tipo di un oggetto.

Avviso

Questo articolo si riferisce alla versione Estensioni Componenti C++ di typeid.Per la versione dello standard ISO di C++ di questa parola chiave, vedere Operatore typeid.

Tutti i runtime

Sintassi

T::typeid

Parametri

  • T
    Un tipo di nome.

Windows Runtime

Sintassi

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

Parametri

  • T
    Un tipo di nome.

Note

In C++/CX, typeid restituisce Platform::Type che viene costruito con le informazioni sui tipi in fase di esecuzione.

Requisiti

Opzione del compilatore: /ZW

Common Language Runtime

Sintassi

type::typeid

Parametri

  • type
    Il nome di un tipo (dichiaratore astratto) per il quale si desidera l'oggetto System::Type.

Note

typeid viene utilizzato per ottenere Type per un tipo in fase di compilazione.

typeid ottiene in modo simile System::Type per un tipo in fase di esecuzione rispetto a GetType o GetType. Tuttavia, typeid accetta un solo nome del tipo come parametro. Se si desidera utilizzare un'istanza di un tipo per ottenere il nome System::Type, utilizzare GetType.

typeid deve essere in grado di valutare un nome del tipo (tipo) in fase di compilazione, mentre GetType valuta il tipo che deve essere restituito in fase di esecuzione.

typeid può accettare un alias per il nome del tipo nativo o un alias di Common Language Runtime per il nome del tipo nativo; vedere la pagina Equivalenti di .NET Framework a tipi nativi C++ (C++/CLI) per ulteriori informazioni.

typeid è applicabile anche ai tipi nativi, sebbene sia ancora restituito un System::Type. Per ottenere una struttura type_info, utilizzare Operatore typeid.

typeid è il successore di __typeof nella precedente sintassi /clr.

Requisiti

Opzione del compilatore: /clr

Esempi

Esempio

Nell'esempio seguente vengono confrontate la parola chiave typeid e 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);
}

Output

  
  

Esempio

Nell'esempio seguente viene illustrata una variabile di tipo System::Type che può essere utilizzata per ottenere gli attributi su un tipo. Mostra inoltre che per alcuni tipi, è necessario creare un typedef per utilizzare 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");
}

Output

  
  
  
  
  
  
  
  

Vedere anche

Concetti

Estensioni componenti per le piattaforme runtime