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