CRuntimeClass

转载 2007年09月17日 21:54:00

CRuntimeClassMFC中的作用很重要,因为MFC利用它来进行类的动态确定,即是通过类变量来判定该变量是否为某一类的实例。由于指针的类型是可以转换的,所以时常会出现从AB的转换导致错误。而在MFC的各种书籍中对CRuntimeClass的介绍是比较少的,在这里总结它的一些用法。
1
、动态确定类
MFCCObject::IsKindOf( const CRuntimeClass* pClass ) 利用CRuntimeClass来进行判定,如果你生成的类是以CObject为基础的,你可以使用该成员函数来判定。下面举一个例子来加深了解。

class CAge:public CObject
BOOL IsAge(CObject
* pO)
...{
    
return pO->IsKindOf( RUNTIME_CLASS( CAge ) );
}

BOOL IsAge2(CAge
* pO)
...{
    
return pO->IsKindOf( RUNTIME_CLASS( CAge ) );
}

void main(void)
...{
    CObject a;
    CAge b;
    IsAge(
&a);//return FALSE
    IsAge(&b);//return TRUE
    IsAge2((CAge*)&a);//return FALSE,避免强制转换带来的错误
}

 2、生成类
CObject CRuntimeClass::CreateObject(void)
可以产生一个类变量。作用和new类似,但在某些特殊场合有独特的作用。下面举一个例子来加深了解。
假定有以下几个类定义

在上面例子中,CreateWnd返回的是CWnd* 其实它是一个CWndA*。你可以进行由父类到子类的强制转换而不必要担心出错。使用CRuntimeClass可以代替使用switch生产类实例的一些繁琐。(请好好想想它的用途,当你发现它的好处时,你一定会大吃一惊,M$使用宏来实现类的动态检测,如果谁有兴趣可以去看看MFC的源代码。)
注意:在类的定义中使用IMPLEMENT_DYNCREATE后方可生效。 

class CWndA: public CWnd
class CWndB: public CWnd
function1()
...{
    CRuntimeClass
* pC=RUNTIME_CLASS( CWndA );
    CreateWnd(pC);
}

CWnd
* CreateWnd(CRuntimeClass* pClass)
...{
    
return (CWnd*)pClass->CreateObject();
}

CRuntimeClass的作用详解

// Runtime class serialization code CRuntimeClass* PASCALCRuntimeClass::Load(CArchive& ar, UINT* pw...
  • wanxiaohong1350
  • wanxiaohong1350
  • 2012年05月26日 11:39
  • 2966

CRuntimeClass的结构与功能

CRuntimeClass在MFC中是至关重要的一个结构。 CRuntimeClass没有基类。   每个由CObject派生的类都与一个CRuntimeClass结构相联系,用户可以使用该结构获...
  • liuchen1206
  • liuchen1206
  • 2012年06月11日 18:29
  • 8034

深入浅出MFC学习笔记1--CRuntimeClass相关

1.MFC数个重要类层次关系仿真CObject,CCmdTarget, CWnd,CFrameWnd,CDocument,CView CWinApp,CWinThread2.MFC程序初始化和运行...
  • x13262608581
  • x13262608581
  • 2015年10月06日 22:37
  • 548

CRunTimeClass 动态创建类

关于 CRuntimeClass 的说明就不多说了,网上一大堆,直接上示例
  • xl19900502
  • xl19900502
  • 2014年06月27日 23:46
  • 691

C++动态识别与生成以及在MFC CRuntimeClass的应用

P>C++语言的爱好者们,不知你们注意到了没有,在编写某些程序时,如果能够根据一个类的名字动态地生成此类, 那么,整个程序的结构就能够非常简练.举个例子,你的程序需要用到一个文本文件,而此文件中存放着...
  • weiaipan1314
  • weiaipan1314
  • 2016年06月29日 15:37
  • 263

CRuntimeClass

   CRuntimeClass在MFC中的作用很重要,因为MFC利用它来进行类的动态确定,即是通过类变量来判定该变量是否为某一类的实例。由于指针的类型是可以转换的,所以时常会出现从A到B的转换导致错...
  • michaelrun
  • michaelrun
  • 2007年10月12日 14:28
  • 625

MFC 创建UI 线程 || 无法解析的外部符号 "public: virtual struct CRuntimeClass

MFC 分UI线程和工作线程,一般现在的应用程序都是一个主UI线程和N个工作线程来完成工作。主UI线程获取到工作线程发送的信息来刷新界面。 不过因为工作需要,MFC有要维护的项目,因此就学习一下MF...
  • linux_hacher
  • linux_hacher
  • 2017年03月02日 10:30
  • 346

MFC中CRuntimeClass中的m_pfnCreateObject

From:http://blog.csdn.net/wwwsq/archive/2009/08/27/4490845.aspxAuthor:王绍全CRuntimeClas的头文件声明里面,有一行非常奇...
  • chaosllgao
  • chaosllgao
  • 2010年03月30日 13:30
  • 615

CRuntimeClass::FromName

CRuntimeClass::FromName Visual Studio 2005 其他版本 此主题尚未评级 - 评价此主题 ...
  • laogaoAV
  • laogaoAV
  • 2013年02月12日 16:05
  • 592

error LNK2001: unresolved external symbol "public: static struct CRuntimeClass const CQQFace::classC

在用VC做仿QQ面板的时候,加入了几个对话框类,应用RUNTIME_CLASS()时,编译时出现如下错误:error LNK2001: unresolved external symbol "publ...
  • BeyondHaven
  • BeyondHaven
  • 2010年11月30日 14:37
  • 8361
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CRuntimeClass
举报原因:
原因补充:

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