Estrutura CRuntimeClass
Cada classe derivada CObject
está associada a uma estrutura CRuntimeClass
que você pode usar para obter informações sobre um objeto ou sua classe base em tempo de execução.
Sintaxe
struct CRuntimeClass
Membros
Métodos públicos
Nome | Descrição |
---|---|
CRuntimeClass::CreateObject | Cria um objeto durante o tempo de execução. |
CRuntimeClass::FromName | Cria um objeto durante o tempo de execução usando o nome de classe familiar. |
CRuntimeClass::IsDerivedFrom | Determina se a classe é derivada da classe especificada. |
Membros de Dados Públicos
Nome | Descrição |
---|---|
CRuntimeClass::m_lpszClassName | O nome da classe. |
CRuntimeClass::m_nObjectSize | O tamanho do objeto em bytes. |
CRuntimeClass::m_pBaseClass | Um ponteiro para a estrutura CRuntimeClass da classe base. |
CRuntimeClass::m_pfnCreateObject | Um ponteiro para a função que cria dinamicamente o objeto. |
CRuntimeClass::m_pfnGetBaseClass | Retorna a estrutura CRuntimeClass (disponível somente quando vinculada dinamicamente). |
CRuntimeClass::m_wSchema | O número de esquema da classe. |
Comentários
CRuntimeClass
é uma estrutura, portanto, não tem uma classe base.
A capacidade de determinar a classe de um objeto em tempo de execução é útil quando a verificação de tipo extra de argumentos de função é necessária ou quando você deve escrever um código de finalidade especial com base na classe de um objeto. Não há suporte para informações de classe em tempo de execução diretamente pela linguagem C++.
CRuntimeClass
fornece informações sobre o objeto C++ relacionado, como um ponteiro para a classe base CRuntimeClass
e o nome de classe ASCII da classe relacionada. Essa estrutura também implementa várias funções que podem ser usadas para criar objetos dinamicamente, especificando o tipo de objeto usando um nome familiar e determinando se a classe relacionada é derivada de uma classe específica.
Para mais informações sobre como usar CRuntimeClass
, confira o artigo Como acessar informações da classe em tempo de execução.
Hierarquia de herança
CRuntimeClass
Requisitos
Cabeçalho: afx.h
CRuntimeClass::CreateObject
Chame essa função para criar dinamicamente a classe especificada durante o tempo de execução.
CObject* CreateObject();
static CObject* PASCAL CreateObject(LPCSTR lpszClassName);
static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);
Parâmetros
lpszClassName
O nome familiar da classe a ser criada.
Valor de retorno
Um ponteiro para o objeto recém-criado ou NULL se o nome de classe não for encontrado ou não houver memória suficiente para criar o objeto.
Comentários
Classes derivadas de CObject
podem dar suporte à criação dinâmica, que é a capacidade de criar um objeto de uma classe especificada em tempo de execução. As classes de documento, exibição e quadro, por exemplo, devem dar suporte à criação dinâmica. Para mais informações sobre a criação dinâmica e o CreateObject
membro, confira Classe CObject e Classe CObject: como especificar níveis de funcionalidade.
Exemplo
Veja o exemplo de IsDerivedFrom.
CRuntimeClass::FromName
Chame essa função para recuperar a estrutura CRuntimeClass
associada ao nome familiar.
static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);
static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);
Parâmetros
lpszClassName
O nome familiar de uma classe derivada de CObject
.
Valor de retorno
Um ponteiro para um objeto CRuntimeClass
, correspondente ao nome conforme passado em lpszClassName. A função retornará NULL se nenhum nome de classe correspondente tiver sido encontrado.
Exemplo
// This example creates an object if CAge is defined.
CRuntimeClass* pClass = CRuntimeClass::FromName(_T("CAge"));
if (pClass == NULL)
{
// not found, display a warning for diagnostic purposes
AfxMessageBox(_T("Warning: CMyClass not defined"));
return NULL;
}
// attempt to create the object with the found CRuntimeClass
CObject* pObject = pClass->CreateObject();
CRuntimeClass::IsDerivedFrom
Chame essa função para determinar se a classe de chamada é derivada da classe especificada no parâmetro pBaseClass.
BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;
Parâmetros
pBaseClass
O nome familiar de uma classe derivada de CObject
.
Valor de retorno
TRUE se a classe que está chamando IsDerivedFrom
for derivada da classe base cuja estrutura CRuntimeClass
é fornecida como um parâmetro; caso contrário, FALSE.
Comentários
A relação é determinada por "andar" da classe do membro até a cadeia de classes derivadas até o topo. Essa função só retornará FALSE se nenhuma correspondência for encontrada para a classe base.
Observação
Para usar a estrutura CRuntimeClass
, você deve incluir a macro IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE ou IMPLEMENT_SERIAL na implementação da classe para a qual deseja recuperar informações de objeto em tempo de execução.
Para mais informações sobre como usar CRuntimeClass
, confira o artigo Classe CObject: como acessar informações de classe em tempo de execução.
Exemplo
// This example creates an object from the run-time class. It only
// creates objects derived from CWnd.
// We only want to create an object derived from CWnd.
if (!pClass->IsDerivedFrom(RUNTIME_CLASS(CWnd)))
{
TRACE(_T("Error; Object %s is not derived from CWnd\n"),
pClass->m_lpszClassName);
return FALSE;
}
// Get a pointer to the base class CRuntimeClass.
#ifdef _AFXDLL
CRuntimeClass* pBaseClass = pClass->m_pfnGetBaseClass();
#else
CRuntimeClass* pBaseClass = pClass->m_pBaseClass;
#endif
ASSERT(pBaseClass != NULL);
TRACE("Creating object %s derived from %s, with object size %d "
"and schema %d\n", pClass->m_lpszClassName,
pBaseClass->m_lpszClassName, pClass->m_nObjectSize,
pClass->m_wSchema);
// Create the object.
CObject* pObject = pClass->CreateObject();
CRuntimeClass::m_lpszClassName
Uma cadeia de caracteres terminada em nulo que contém o nome de classe ASCII.
Comentários
Esse nome pode ser usado para criar uma instância da classe usando a função de membro FromName
.
Exemplo
Veja o exemplo de IsDerivedFrom.
CRuntimeClass::m_nObjectSize
O tamanho do objeto em bytes.
Comentários
Se o objeto tiver membros de dados que apontam para a memória alocada, o tamanho dessa memória não será incluído.
Exemplo
Veja o exemplo de IsDerivedFrom.
CRuntimeClass::m_pBaseClass
Se o aplicativo for vinculado estaticamente ao MFC, esse membro de dados conterá um ponteiro para a estrutura da classe base CRuntimeClass
.
Comentários
Se o aplicativo for vinculado dinamicamente à biblioteca MFC, confira m_pfnGetBaseClass.
Exemplo
Veja o exemplo de IsDerivedFrom.
CRuntimeClass::m_pfnCreateObject
Um ponteiro de função para o construtor padrão que cria um objeto de sua classe.
Comentários
Esse ponteiro só será válido se a classe der suporte à criação dinâmica; caso contrário, a função retornará NULL.
CRuntimeClass::m_pfnGetBaseClass
Se o aplicativo usar a biblioteca MFC como uma DLL compartilhada, esse membro de dados apontará para uma função que retorna a estrutura CRuntimeClass
da classe base.
Comentários
Se o aplicativo for vinculado estaticamente à biblioteca MFC, confira m_pBaseClass.
Exemplo
Veja o exemplo de IsDerivedFrom.
CRuntimeClass::m_wSchema
O número do esquema (-1 para classes não sequenciais).
Comentários
Para mais informações sobre números de esquema, confira a macro IMPLEMENT_SERIAL.
Exemplo
Veja o exemplo de IsDerivedFrom.
Confira também
Gráfico da hierarquia
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL