Структура CRuntimeClass
Каждый класс, производный от CObject
, связан со структурой CRuntimeClass
, которую можно использовать для получения сведений об объекте или его базовом классе во время выполнения.
Синтаксис
struct CRuntimeClass
Участники
Открытые методы
Имя | Описание |
---|---|
CRuntimeClass::CreateObject | Создает объект во время выполнения. |
CRuntimeClass::FromName | Создает объект во время выполнения с помощью знакомого имени класса. |
CRuntimeClass::IsDerivedFrom | Определяет, является ли класс производным от указанного класса. |
Открытые члены данных
Имя | Описание |
---|---|
CRuntimeClass::m_lpszClassName | Имя класса. |
CRuntimeClass::m_nObjectSize | Размер объекта в байтах. |
CRuntimeClass::m_pBaseClass | Указатель на CRuntimeClass структуру базового класса. |
CRuntimeClass::m_pfnCreateObject | Указатель на функцию, которая динамически создает объект. |
CRuntimeClass::m_pfnGetBaseClass | Возвращает структуру CRuntimeClass (доступную только при динамическом связывании). |
CRuntimeClass::m_wSchema | Номер схемы класса. |
Замечания
CRuntimeClass
является структурой и поэтому не имеет базового класса.
Возможность определить класс объекта во время выполнения полезна, если требуется дополнительная проверка типов аргументов функции или когда необходимо написать код специального назначения на основе класса объекта. Сведения о классе времени выполнения не поддерживаются непосредственно языком C++.
CRuntimeClass
предоставляет сведения о связанном объекте C++, например указателе на CRuntimeClass
базовый класс и имя класса ASCII связанного класса. Эта структура также реализует различные функции, которые можно использовать для динамического создания объектов, указания типа объекта с помощью знакомого имени и определения, является ли связанный класс производным от определенного класса.
Дополнительные сведения об использовании CRuntimeClass
см. в статье, в статье о доступе к сведениям о классе времени выполнения.
Иерархия наследования
CRuntimeClass
Требования
Заголовок: afx.h
CRuntimeClass::CreateObject
Вызовите эту функцию для динамического создания указанного класса во время выполнения.
CObject* CreateObject();
static CObject* PASCAL CreateObject(LPCSTR lpszClassName);
static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);
Параметры
lpszClassName
Знакомое имя создаваемого класса.
Возвращаемое значение
Указатель на только что созданный объект или NULL, если имя класса не найдено или недостаточно памяти для создания объекта.
Замечания
Классы, производные от CObject
них, могут поддерживать динамическое создание, что позволяет создавать объект указанного класса во время выполнения. Например, классы документов, представлений и фреймов должны поддерживать динамическое создание. Дополнительные сведения о динамическом создании и члене см. в разделе CObject Class и CreateObject
CObject Class: указание уровней функциональности.
Пример
См. пример для IsDerivedFrom.
CRuntimeClass::FromName
Вызовите эту функцию, чтобы получить CRuntimeClass
структуру, связанную с знакомым именем.
static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);
static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);
Параметры
lpszClassName
Знакомое имя класса, производного от CObject
.
Возвращаемое значение
Указатель на объект, соответствующий имени, передаваемого CRuntimeClass
в lpszClassName. Функция возвращает значение NULL, если не найдено соответствующее имя класса.
Пример
// 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
Вызовите эту функцию, чтобы определить, является ли вызывающий класс производным от класса, указанного в параметре pBaseClass .
BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;
Параметры
pBaseClass
Знакомое имя класса, производного от CObject
.
Возвращаемое значение
ЗНАЧЕНИЕ TRUE, если вызов IsDerivedFrom
класса является производным от базового класса, структура которого CRuntimeClass
присваивается в качестве параметра; в противном случае — FALSE.
Замечания
Связь определяется путем "ходьбы" от класса члена вверх по цепочке производных классов вплоть до верхней части. Эта функция возвращает значение FALSE, только если совпадение не найдено для базового класса.
Примечание.
Чтобы использовать CRuntimeClass
структуру, необходимо включить макрос IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE или IMPLEMENT_SERIAL в реализацию класса, для которого требуется получить сведения об объекте времени выполнения.
Дополнительные сведения об использовании CRuntimeClass
см. в статье класс CObject: доступ к сведениям о классе времени выполнения.
Пример
// 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
Строка, завершающая значение NULL, содержащая имя класса ASCII.
Замечания
Это имя можно использовать для создания экземпляра класса с помощью FromName
функции-члена.
Пример
См. пример для IsDerivedFrom.
CRuntimeClass::m_nObjectSize
Размер объекта в байтах.
Замечания
Если объект содержит элементы данных, указывающие на выделенную память, размер этой памяти не включен.
Пример
См. пример для IsDerivedFrom.
CRuntimeClass::m_pBaseClass
Если приложение статически связывается с MFC, этот элемент данных содержит указатель на CRuntimeClass
структуру базового класса.
Замечания
Если приложение динамически ссылается на библиотеку MFC, см . m_pfnGetBaseClass.
Пример
См. пример для IsDerivedFrom.
CRuntimeClass::m_pfnCreateObject
Указатель функции на конструктор по умолчанию, который создает объект класса.
Замечания
Этот указатель действителен только в том случае, если класс поддерживает динамическое создание; в противном случае функция возвращает ЗНАЧЕНИЕ NULL.
CRuntimeClass::m_pfnGetBaseClass
Если приложение использует библиотеку MFC в качестве общей библиотеки DLL, этот элемент данных указывает на функцию, которая возвращает CRuntimeClass
структуру базового класса.
Замечания
Если приложение статически ссылается на библиотеку MFC, см . m_pBaseClass.
Пример
См. пример для IsDerivedFrom.
CRuntimeClass::m_wSchema
Номер схемы (-1 для несериализируемых классов).
Замечания
Дополнительные сведения о номерах схем см . в макросе IMPLEMENT_SERIAL .
Пример
См. пример для IsDerivedFrom.
См. также
Диаграмма иерархии
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL