即是说,我们类说明中使用declare_dyncreate(classnmae)宏和在类的实现文件中使用implement_dyncreate(classname,baseclass)宏来为我们加入链表,至于这两个宏怎么为我们建立一个链表,我们自己可以玩玩文字代换的游戏,在此不一一累赘。但要说明的一点就是:动态创建宏xxx_dyncreate包含了rtti宏,即是说, xxx_dyncreate是xxx_dynamic的“增强版”。
到此,我们有必要了解一下上节课没有明讲的m_pnextclass指针。因为mfc层次结构是树状的,并不是直线的。如果我们只有一个m_pbaseclass指针,它只会沿着基类上去,会漏掉其它分支。在动态创建时,必需要检查整个链表,看有多少个要动态创建的对象,即是说要从表头(pfirstclass)开始一直遍历到表尾(m_pnextclass=null),不能漏掉一个cruntimeclass对象。
所以每当有一个新的链表元素要加入链表的时候,我们要做的就是使新的链表元素成为表头,并且m_pnextclass指向原来链表的表头,即像下面那样(当然,这些不需要我们操心,是rtti宏帮助我们完成的):