typeid (C++/CLI e C++/CX)
Obtém um valor que indica o tipo de um objeto.
Observação
Este tópico refere-se à versão de extensões de componente C++ do typeid. Para a versão C++ do ISO dessa palavra-chave, confira Operador typeid.
Todos os Runtimes
Sintaxe
T::typeid
Parâmetros
T
O nome de um tipo.
Windows Runtime
Sintaxe
Platform::Type^ type = T::typeid;
Parâmetros
T
O nome de um tipo.
Comentários
No C++/CX, typeid retorna um Platform::Type construído com base em informações de tipo do runtime.
Requisitos
Opção do compilador: /ZW
Common Language Runtime
Sintaxe
System::Type^ type = T::typeid;
Parâmetros
tipo
O nome de um tipo (declarador abstrato) para o qual você deseja o objeto System::Type
.
Comentários
typeid
é usado para obter o Type para um tipo em tempo de compilação.
typeid
é semelhante a obter o System::Type
de um tipo em tempo de execução usando GetType ou GetType. No entanto, typeid
aceita apenas um nome de tipo como parâmetro. Se quiser usar uma instância de um tipo para obter seu nome System::Type
, use GetType
.
typeid
deve ser capaz de avaliar um nome de tipo (tipo) no tempo de compilação, enquanto GetType avalia o tipo a retornar no tempo de execução.
typeid
pode ter um nome de tipo nativo ou um alias de Common Language runtime para o nome do tipo nativo; saiba mais em Equivalentes do .NET Framework aos tipos nativos do C++ (C++/CLI).
typeid
também funciona com tipos nativos, embora ainda retorne um System::Type
. Para obter uma estrutura type_info, use o Operador typeid
.
Requisitos
Opção do compilador: /clr
Exemplos
O exemplo a seguir compara a palavra-chave typeid ao 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*
O exemplo a seguir mostra que uma variável do tipo System::Type pode ser usada para obter os atributos em um tipo. Também mostra que, para alguns tipos, é preciso criar um typedef para usar 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