typeid (C++/CLI dan C++/CX)
Mendapatkan nilai yang menunjukkan jenis objek.
Catatan
Topik ini mengacu pada versi typeid Ekstensi Komponen C++. Untuk versi ISO C++ kata kunci ini, lihat Operator typeid.
Semua Runtime
Sintaks
T::typeid
Parameter
T
Nama jenis.
Windows Runtime
Sintaks
Platform::Type^ type = T::typeid;
Parameter
T
Nama jenis.
Keterangan
Di C++/CX, typeid mengembalikan Platform::Type yang dibangun dari informasi jenis runtime.
Persyaratan
Opsi pengkompilasi: /ZW
Runtime Bahasa Umum
Sintaks
System::Type^ type = T::typeid;
Parameter
jenis
Nama jenis (deklarator abstrak) yang objeknya System::Type
Anda inginkan.
Keterangan
typeid
digunakan untuk mendapatkan Type jenis pada waktu kompilasi.
typeid
mirip dengan mendapatkan System::Type
jenis saat run time menggunakan GetType atau GetType. Namun, typeid
hanya menerima nama jenis sebagai parameter. Jika Anda ingin menggunakan instans jenis untuk mendapatkan namanya System::Type
, gunakan GetType
.
typeid
harus dapat mengevaluasi nama jenis (jenis) pada waktu kompilasi, sedangkan GetType mengevaluasi jenis yang akan dikembalikan pada waktu proses.
typeid
dapat mengambil nama jenis asli atau alias runtime bahasa umum untuk nama jenis asli; lihat .NET Framework Setara dengan C++ Native Type (C++/CLI) untuk informasi selengkapnya.
typeid
juga berfungsi dengan jenis asli, meskipun masih akan mengembalikan System::Type
. Untuk mendapatkan struktur type_info, gunakan typeid
Operator.
Persyaratan
Opsi pengkompilasi: /clr
Contoh
Contoh berikut membandingkan kata kunci typeid dengan GetType()
anggota.
// 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*
Sampel berikut menunjukkan bahwa variabel jenis System::Type dapat digunakan untuk mendapatkan atribut pada jenis. Ini juga menunjukkan bahwa untuk beberapa jenis, Anda harus membuat typedef untuk menggunakan 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