Estrutura CRuntimeClass
Cada classe derivada de CObject
é associada a uma CRuntimeClass
estrutura 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
Name | 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 conhecido nome de classe. |
CRuntimeClass::IsDerivedFrom | Determina se a classe é derivada da classe especificada. |
Membros de Dados Públicos
Name | 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 CRuntimeClass estrutura da classe base. |
CRuntimeClass:: m_pfnCreateObject | Um ponteiro para a função que cria dinamicamente o objeto. |
CRuntimeClass:: m_pfnGetBaseClass | Retorna a CRuntimeClass estrutura (disponível somente quando vinculada dinamicamente). |
CRuntimeClass:: m_wSchema | O número de esquema da classe. |
Comentários
CRuntimeClass
é uma estrutura e, 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 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 o CRuntimeClass
da classe base e o nome da 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 obter mais informações sobre como usar CRuntimeClass
o, consulte o artigo acessando Run-Time informações de classe.
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 Retornado
Um ponteiro para o objeto recém-criado ou NULL se o nome da classe não for encontrado ou se não houver memória suficiente para criar o objeto.
Comentários
Classes derivadas de CObject
podem oferecer suporte à criação dinâmica, que é a capacidade de criar um objeto de uma classe especificada em tempo de execução. As classes Document, View e frame, por exemplo, devem oferecer suporte à criação dinâmica. Para obter mais informações sobre a criação dinâmica e o CreateObject
membro, consulte classe CObject e classe CObject: especificando níveis de funcionalidade.
Exemplo
Consulte o exemplo de IsDerivedFrom.
CRuntimeClass::FromName
Chame essa função para recuperar a CRuntimeClass
estrutura 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 Retornado
Um ponteiro para um CRuntimeClass
objeto, correspondente ao nome passado em lpszClassName. A função retornará NULL se nenhum nome de classe correspondente for 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 Retornado
TRUE se a chamada IsDerivedFrom
de classe for derivada da classe base cuja CRuntimeClass
estrutura é fornecida como um parâmetro; caso contrário, false.
Comentários
A relação é determinada pela "movimentação" da classe do membro a cadeia de classes derivadas até o topo. Essa função retornará FALSE somente se nenhuma correspondência for encontrada para a classe base.
Observação
Para usar a CRuntimeClass
estrutura, você deve incluir a macro IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE ou IMPLEMENT_SERIAL na implementação da classe para a qual você deseja recuperar informações de objeto de tempo de execução.
Para obter mais informações sobre como usar CRuntimeClass
o, consulte o artigo CObject Class: accessing Run-Time Class Information.
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 da classe ASCII.
Comentários
Esse nome pode ser usado para criar uma instância da classe usando a função de FromName
membro.
Exemplo
Consulte 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
Consulte o exemplo de IsDerivedFrom.
CRuntimeClass:: m_pBaseClass
Se o seu aplicativo se vincula estaticamente ao MFC, esse membro de dados contém um ponteiro para a CRuntimeClass
estrutura da classe base.
Comentários
Se o seu aplicativo se vincula dinamicamente à biblioteca do MFC, consulte m_pfnGetBaseClass.
Exemplo
Consulte 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 oferecer suporte à criação dinâmica; caso contrário, a função retornará NULL.
CRuntimeClass:: m_pfnGetBaseClass
Se seu aplicativo usar a biblioteca MFC como uma DLL compartilhada, esse membro de dados apontará para uma função que retorna a CRuntimeClass
estrutura da classe base.
Comentários
Se o aplicativo estiver estaticamente links para a biblioteca MFC, consulte m_pBaseClass.
Exemplo
Consulte o exemplo de IsDerivedFrom.
CRuntimeClass::m_wSchema
O número do esquema ( -1 para classes não sequenciais).
Comentários
Para obter mais informações sobre números de esquema, consulte a IMPLEMENT_SERIAL macro.
Exemplo
Consulte o exemplo de IsDerivedFrom.
Confira também
Gráfico de hierarquia
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL