MFC运行时类型信息(RTCI)

原创 2011年01月21日 16:12:00

 

RTCI(runtime class information)CObject对象提供的一个功能,它能判断一个类是否是从某个类派生而来。

 

       使用RTCI需要满足两个条件:

1、  CObject派生

2、  在类声明中添加DECLARE_DYNAMIC宏,在实现文件中添加IMPLEMENT_DYNAMIC宏。

 

 


 

示例:

 

 用法:

 

 


解析:

IsKindOfCObject中的成员函数,任何从CObject派生而来的类都可以使用它,用来确定是否从特定的类派生而来。

  

RUNTIME_CLASS这个宏将类名称转换为了CRuntimeClass*,它是如何做到的呢?静态库版本定义如下:

RUNTIME_CLASS(CParent)展开就是:((CRuntimeClass*)(&CParent::classCParent))

可以看出,classCParentCParent的成员变量。那它是怎么来的呢?它是DECLARE_DYNAMIC这个宏引入到类中的。

 

DECLARE_DYNAMIC宏定义如下:

DECLARE_DYNAMIC宏在类中引入了一个静态常成员变量和一个用于获取当前类对象CRuntimeClass指针的虚函数。将DECLARE_DYNAMIC(CParent)展开,即为:

  

GetRuntimeClass被定义为虚函数,因为如果被定义为普通成员函数,当以一个指向派生类对象的父类指针调用GetRuntimeClass时,获得的将是对应父类的CRuntimeClass指针。这也是覆盖与多态的区别所在。

 

在类中添加的声明,对应的在实现文件中就应该有实现,IMPLEMENT_DYNAMIC宏用来完成这件事。它初始化了类的静态常变量,并且定义了GetRuntimeClass函数。宏定义如下:

 

CRuntimeClass结构如下:

 

CRuntimeClass中有7个成员变量,还有一些成员函数。RTCI只使用了CRuntimeClass中的三个成员变量:m_lpszClassNamem_nObjectSizem_pBaseClass,也用到了IsDerivedFrom函数。

 

IsDerivedFrom通过向上遍历继承树,来判断对象是否是从某个类派生而来。

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

evhttp实现的http服务器

/* A trivial static http webserver using Libevent's evhttp. This is not the best code in the wo...

MFC动态创建

RTCI是动态创建的基础,它包含了RTCI的功能,一个示例: class CMyClass : public CObject { DECLARE_DYNCREATE(CMyClass); };...

Windows消息投递流程:一般窗口消息投递(WM_LBUTTONCLICK)

本例通过在单文档程序的视图中添加WM_LBUTTONCLICK消息处理函数,来解释一般窗口消息的投递流程。 基于VS 2005BEGIN_MESSAGE_MAP(CMyView, CView) O...

MFC的消息处理机制由两部分组成:CCmdTarget类和消息映射表。

MFC的消息处理机制由两部分组成:CCmdTarget类和消息映射表。   窗口消息构成 所有的窗口消息由3部分组成 UINT Msg,  WPARAM wParam,  LPAR...
  • worldy
  • worldy
  • 2013-11-03 09:57
  • 1056

消息处理机制:CCmdTarget 和 消息映射表

MFC的消息处理机制由两部分组成:CCmdTarget类和消息映射表。 窗口消息构成所有的窗口消息由3部分组成UINTMsg, WPARAMwParam, LPARAMlParam 为神马不用虚函数来...

CCmdTarget类

该类派生于CObject,它封装了MFC的消息映射机制,希望接收系统事件和窗口消息的类都从它派生,如CDocument和CWnd分支。此外,在系统繁忙,无法响应窗口消息时,鼠标光标应该显示为沙漏形等待...
  • WINCOL
  • WINCOL
  • 2009-07-28 16:18
  • 2461

CCmdTarget

CCmdTarget 类CCmdTarget是MFC类库中消息映射体系的一个基类。消息映射把命令或消息引导给用户为之编写的响应函数(命令是由菜单项、命令...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)