Dela via


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

Hämtar ett värde som anger typen av objekt.

Anmärkning

Det här avsnittet refererar till C++-komponenttilläggsversionen av typeid. Iso C++-versionen av det här nyckelordet finns i typeid Operator.

Alla körningar

Syntax

T::typeid

Parameterar

T
Ett typnamn.

Windows Runtime

Syntax

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

Parameterar

T
Ett typnamn.

Anmärkningar

I C++/CX returnerar typeid en plattform::Typ som är konstruerad från körningstypsinformation.

Kravspecifikation

Kompilatoralternativ: /ZW

Allmänt språk-runtime

Syntax

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

Parameterar

typ
Namnet på en typ (abstrakt deklarator) som du vill använda objektet System::Type för.

Anmärkningar

typeid används för att hämta Type för en typ vid kompileringstid.

typeid liknar att hämta System::Type för en typ vid körning med hjälp av GetType eller GetType. Accepterar dock typeid bara ett typnamn som en parameter. Om du vill använda en instans av en typ för att hämta dess System::Type namn använder du GetType.

typeid måste kunna utvärdera ett typnamn (typ) vid kompileringstillfället, medan GetType utvärderar typen som ska returneras vid körning.

typeidkan ta ett internt typnamn eller ett vanligt språkkörningsalias för det interna typnamnet. Mer information finns i .NET Framework Equivalents to C++ Native Types (C++/CLI).

typeid fungerar också med inbyggda typer, även om den fortfarande returnerar en System::Type. Om du vill få en type_info struktur använder du typeid Operator.

Kravspecifikation

Kompilatoralternativ: /clr

Exempel

I följande exempel jämförs nyckelordet typeid med GetType() medlemmen.

// 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*

Följande exempel visar att en variabel av typen System::Type kan användas för att hämta attributen för en typ. Det visar också att för vissa typer måste du skapa en typedef för att använda 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

Se även

Komponenttillägg för .NET och UWP