Suporte para Compilador de Traços de Tipo (Extensões de Componentes C++)
O compilador suporta características do tipo, que indicam várias características de um tipo em tempo de compilação.
Todos os tempos de execução
Comentários
Características do tipo são especialmente úteis para os programadores que escrevem bibliotecas.
A tabela a seguir lista as características do tipo que são suportadas pelo compilador.Todos tipo de retorno de características false se a condição especificada pelo nome da característica de tipo não for atendida.
(Na coluna Descrição da tabela, exemplos de código são escritos em C++/CLI.Mas a característica de tipo correspondente também é suportada no Extensões de componentes Visual C++ salvo indicação em contrário.O termo "tipo de plataforma" refere-se a um Tempo de Execução do Windows tipos ou tipos common language runtime.)
Característica do tipo |
Descrição |
---|---|
__has_assign(type) |
Retorna true se o tipo nativo ou plataforma tiver um operador de atribuição cópia.
|
__has_copy(type) |
Retorna true se a plataforma ou tipo nativo tem um construtor de cópia.
|
__has_finalizer(type) |
(Não tem suportada no Extensões de componentes Visual C++.) Retorna true se o tipo CLR tem um finalizador.Consulte Destruidores e finalizadores no Visual C++ para maiores informações.
|
__has_nothrow_assign(type) |
Retorna true se um operador de atribuição cópia tem uma especificação de exceção vazia.
|
__has_nothrow_constructor(type) |
Retorna true se o construtor padrão tem uma especificação de exceção vazia.
|
__has_nothrow_copy(type) |
Retorna true se o construtor de cópia tem uma especificação de exceção vazia.
|
__has_trivial_assign(type) |
Retorna true se o tipo tiver um operador de atribuição trivial, gerado pelo compilador.
|
__has_trivial_constructor(type) |
Retorna true se o tipo tem um construtor trivial, gerado pelo compilador.
|
__has_trivial_copy(type) |
Retorna true se o tipo tem um construtor de copiar trivial, gerado pelo compilador.
|
__has_trivial_destructor(type) |
Retorna true se o tipo tiver um destruidor trivial, gerado pelo compilador.
|
__has_user_destructor(type) |
Retorna true se a plataforma ou tipo nativo tem um destruidor declarada de usuário.
|
__has_virtual_destructor(type) |
Retorna true se o tipo tiver um destruidor virtual. __has_virtual_destructortambém funciona em tipos de plataforma e qualquer destruidor definido pelo usuário em um tipo de plataforma é um destruidor virtual.
|
__is_abstract(type) |
Retorna true se o tipo é um tipo abstrato.Para obter mais informações sobre tipos abstratos nativos, consulte abstrata (Extensões de Componentes C++). __is_abstracttambém funciona para tipos de plataforma.Uma interface com pelo menos um membro é um tipo abstrato como um tipo de referência pelo menos um membro abstract.Para obter mais informações sobre tipos abstratos de plataforma, consulteClasses abstratas (C++)
|
__is_base_of(base,derived) |
Retorna true se o primeiro tipo é uma classe base do segundo tipo de se ambos os tipos são iguais. __is_base_oftambém funciona em tipos de plataforma.Por exemplo, ele retornará true se o primeiro tipo é um classe de interface (Extensões de Componentes C++) e o segundo tipo implementa a interface.
|
__is_class(type) |
Retorna true se o tipo é nativo class ou struct.
|
__is_convertible_to(from, to) |
Retorna true se o primeiro tipo pode ser convertido para o segundo tipo.
|
__is_delegate(type) |
Retorna VERDADEIRO se type é um delegado.Para mais informações, consulte delegado (Extensões de Componentes C++).
|
__is_empty(type) |
Retorna true se o tipo não possui instância dados membros.
|
__is_enum(type) |
Retorna true se o tipo for um enum nativo.
|
__is_interface_class(type) |
Retorna true se o passado de uma interface de plataforma.Para mais informações, consulte classe de interface (Extensões de Componentes C++).
|
__is_pod(type) |
Retorna true se o tipo é uma classe ou união com nenhum construtor ou membros não-estático privados ou protegidos, não há classes base e não funções virtuais.Consulte o C++ padrão, as seções 8.5.1/1, 9/4 e 3.9/10 para obter mais informações sobre os PODs. __is_podretornará false em tipos fundamentais.
|
__is_polymorphic(type) |
Retorna true se um tipo nativo possui funções virtuais.
|
__is_ref_array(type) |
Retorna true se o passado de uma matriz de plataforma.Para mais informações, consulte Matrizes (Extensões de Componentes C++).
|
__is_ref_class(type) |
Retorna true se o passado de uma classe de referência.Para obter mais informações sobre tipos de referência definidos pelo usuário, consulte Classes e Estruturas (Extensões de Componentes C++).
|
__is_sealed(type) |
Retorna VERDADEIRO se o passado de uma plataforma ou tipo nativo marcado como sealed.Para mais informações, consulte autenticada (Extensões de Componentes C++).
|
__is_simple_value_class(type) |
Retorna true se passado um tipo de valor que não contém nenhuma referência a pilha de coletor.Para obter mais informações sobre tipos de valor definido pelo usuário, consulte Classes e Estruturas (Extensões de Componentes C++).
|
__is_union(type) |
Retorna true se um tipo é uma união.
|
__is_value_class(type) |
Retorna true se passado um tipo de valor.Para obter mais informações sobre tipos de valor definido pelo usuário, consulte Classes e Estruturas (Extensões de Componentes C++).
|
Tempo de Execução do Windows
Comentários
O __has_finalizer(tipo) característica de tipo não é suportada porque esta plataforma não suporta os finalizadores.
Requisitos
Opção de compilador:/ZW
Common Language Runtime
Comentários
(Não há nenhum comentários específicos da plataforma para esse recurso.)
Requisitos
Opção de compilador:/clr
Exemplos
Exemplo
O exemplo de código a seguir mostra como usar um modelo de classe para expor uma característica do tipo de compilador para um /clr compilação.Para mais informações, consulte Tempo de Execução do Windows e Modelos Gerenciados (Extensões de Componentes C++).
// compiler_type_traits.cpp
// compile with: /clr
using namespace System;
template <class T>
ref struct is_class {
literal bool value = __is_ref_class(T);
};
ref class R {};
int main () {
if (is_class<R>::value)
Console::WriteLine("R is a ref class");
else
Console::WriteLine("R is not a ref class");
}
Saída
Consulte também
Conceitos
Extensões de componente para plataformas de tempo de execução