在此书中第二章中讲述RTTI(执行期类型识别)一段中讲解 DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC宏 中_IMPLEMENT_RUNTIMECLASS宏定义中有一个static AFX_CLASSINIT _init_##class_name(&class_name::class##class_name);
这个函数是作什么用的?比如在CView类中宏的展开为
ststatic AFX_CLASSINIT _init_CView(&CView::classCView);
这个函数是作什么用的,是不是用来进行类初始化的?
这个函数是作什么用的?比如在CView类中宏的展开为
ststatic AFX_CLASSINIT _init_CView(&CView::classCView);
这个函数是作什么用的,是不是用来进行类初始化的?
struct AFX_CLASSINIT
{
AFX_CLASSINIT(CRuntimeClass* pNewClass);};AFX_CLASSINIT::AFX_CLASSINIT(CRuntimeClass* pNewClass)
{
pNewClass->m_pNextClass=CRuntimeClass::pFirstClass;
CRuntimeClass::pFirstClass=pNewClass;
}
它负责链表的连接;
struct AFX_CLASSINIT
{
AFX_CLASSINIT(CRuntimeClass* pNewClass);
};AFX_CLASSINIT::AFX_CLASSINIT(CRuntimeClass* pNewClass)
{
pNewClass->m_pNextClass=CRuntimeClass::pFirstClass;
CRuntimeClass::pFirstClass=pNewClass;
}
请注意连接的次序!
struct AFX_CLASSINIT
{
AFX_CLASSINIT(CRuntimeClass* pNewClass);
};
该结构体有一个构造函数如下:
AFX_CLASSINIT::AFX_CLASSINIT(CRuntimeClass* pNewClass)
{
pNewClass->m_pNextClass=CRuntimeClass::pFirstClass;
CRuntimeClass::pFirstClass=pNewClass;
}
此构造函数负责RTTI类型识别网链表的连接;其中链表的头部有定义:
CRuntimeClass* CRuntimeClass::pFirstClass = NULL;以上在 深入浅出MFC 书上都有!