typeid (C++ Component Extensions)
Pobierz wartość, która wskazuje typ obiektu.
Wszystkie czasy wykonania
Składnia
T::typeid
Parametry
- T
Nazwa typu.
Środowisko wykonawcze systemu Windows
Składnia
Platform::Type^ type = T::typeid;
Parametry
- T
Nazwa typu.
Uwagi
W C++/CX, zwraca identyfikator typu Typ ::platformy, który składa się z informacji o typie uruchomienia.
Wymagania
Opcja kompilatora: /ZW
Środowisko uruchomieniowe języka wspólnego
Składnia
type::typeid
Parametry
- typ
Nazwa typu (deklarator abstrakcyjny), dla którego żądasz obiektu System::Type.
Uwagi
typeid jest używany do uzyskiwania Type dla typu w czasie kompilacji.
typeid jest podobne do uzyskiwania za pomocą GetType lub GetType System::Type dla typu w czasie wykonywania.Jednakże, identyfikator typu akceptuje tylko nazwę typu jako parametr.Jeśli chcesz użyć wystąpienia typu, aby uzyskać nazwę System::Typ, użyj polecenia GetType.
typeid musi mieć możliwość oceny nazwy typu (typu) w czasie kompilacji, podczas gdy GetType ocenia typ, jaki ma być zwrócony w czasie wykonywania.
typeid może przyjąć nazwę typu natywnego lub alias środowiska uruchomieniowego języka wspólnego dla nazwy typu natywnego; aby uzyskać więcej informacji, zob. .NET Framework ekwiwalenty na typy macierzystym C++ (C + +/ CLI).
typeid współpracuje również z typami natywnymi, chociaż nadal zwraca System::Type.Aby uzyskać strukturę type_info, użyj Operator TypeID.
typeid jest następcą __typeof w poprzedniej składni /clr.
Wymagania
Opcja kompilatora: /clr
Przykłady
Przykład
W poniższym przykładzie słowo kluczowe typeid porównywane jest do elementu członkowskiego 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);
}
Dane wyjściowe
Przykład
Poniższy przykład pokazuje, że zmienna typu System::Type może być użyta do uzyskania atrybutów w danym typie.Pokazuje także, że dla niektórych typów, trzeba będzie utworzyć element typedef w celu użycia 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");
}
Dane wyjściowe