|
Программирование на Visual C++. Архив рассылкиКак будет продемонстрировано далее, MFC элегантно решает эти проблемы, используя реестр с автоматической регистрацией типов [здесь и далее под реестром понимается программная структура, а не реестр WIndows – прим.пер.] и реализуя виртуальные конструкторы на основе зарегистрированных типов. Идентификация типов во время исполнения (RTTI) библиотеки MFC – вот краеугольный камень этой архитектуры. Реестр типов Чтобы осуществить идентификацию объектов во время выполнения, MFC создает в приложении реестр классов, унаследованных от CObject. Этот реестр никак не связан с OLE-реестром, но их концепции схожи. Реестр типов представляет собой связанный список структур CRuntimeClass, в котором каждая структура описывает один класс-наследник CObject. На листинге 1 показано внутреннее устройство структуры CRuntimeClass. Листинг 1 struct CRuntimeClass { // Attributes LPCSTR m_lpszClassName; int m_nObjectSize; UINT m_wSchema; // номер схемы загруженного класса void (PASCAL* m_pfnConstruct)(void* p); // NULL => abstract class CRuntimeClass* m_pBaseClass; // Operations CObject* CreateObject(); // Implementation BOOL ConstructObject(void* pThis); void Store(CArchive& ar); static CRuntimeClass* PASCAL Load(CArchive& ar, UINT* pwSchemaNum); // объекты CRuntimeClass, связанные в простой список CRuntimeClass* m_pNextClass;// список зарегистрированных классов }; Весь фокус в том, что типы из этого реестра не прописаны ни в одной таблице ...» |
Код для вставки книги в блог HTML
phpBB
текст
|
|