All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
解析SQL Server 2008中的新语句:MERGE_[SQL Server教程]
Asp.net三层结构中的变量引用与传递_[Asp.Net教程]
Phalanger-PHP的.NET编译器_php资料_编程技术
PHP对文本数据库的基本操作方法_php资料_编程技术
调试javascript的好方法_JavaScript技术_编程技术
Asp.Net,Forms验证(自定义、角色提供程序、单点登录)_[Asp.Net教程]
delphi坐标系统使用方法详解
SQL,Server,2005数据库开发概述(1)_[SQL,Server教程]
实用的javascript网页特效实例代码片段_JavaScript技术_编程技术
SQL Server 中Inner join 和where的效率差异_[SQL Server教程]
Reading number is top 10 pictures
Men don't mature ten sign
中国的阶级现状
NeedWallpaper2
Beautiful vacuum girl2
The real super beauty10
Athena chu perspective cheongsam shine with New York
何炅哥为中国人的平均工资鸣不平了
清醇靓丽的美眉
Wild animals melee moment of life and death1
Sora aoi possession photo1
Download software ranking
1400篇各类破解文章
I'm come from Beijing2
Tram sex maniac 2 (H) rar bag5
Boxer's Top ten classic battle1
DreamWeaver8
Eclipse 4.2.2 For Win32
Boxer's Top ten classic battle2
功夫熊猫2(上集)
传奇私服架设教程
Unix video tutorial2
qq published in(发表于) 2014/7/9 22:38:31 Edit(编辑)
visual c++ MFC运行时类型识别宏

visual c++ MFC运行时类型识别宏

visual c++ MFC运行时类型识别宏

visual c++ MFC运行时类型识别宏

运行时类型识别(Run Time Type Information,RTTI)是指在程序运行时允许确定对象的类型。MFC扩充了一般C++中运行时类型识别的功能,当一个类支持MFC的运行时类型识别时,它允许程序获取对象的信息和基为信息。

1.RUNTIME_CLASS(class_name)宏

RUNTIME_CLASS宏的原型如下:

#define RUNTIME_CLASS(class_name)

((CRuntimeClass*)(&class_name::class##class_name))

RUNTIME_CLASS宏返回参数class_name所指定类的静态成员变量class##class_name的指针,这个指向一个CRuntimeClass结构。

RUNTIME_CLASS宏使程序能实时创建类的实例。为了让这个宏起作用,定义的类必须从类CObject派生而来,并且在派生类的定义中必须使用宏DECLARE_DYNAMIC、DECLARE_DYNCREATE或DECLARE_SERIAL,在派生类的实现文件中必须使用宏IMPLEMENT_DYNAMIC、IMPLEMENT_DYNCREATE或IMPLEMENT_SERIAL。这3个宏使MFC类及其派生类具有3个不同级的功能。

2.动态支持宏

动态支持宏DECLARE_DYNAMIC(class_name)和IMPLEMENT_DYNAMIC(class_name,base_class_name)能够使CObject派生类的对象具有基本的类型识别机能,可以通过调用成员函数CObject::IsKindOf(ClassName)测试对象与给定类ClassName的关系。

DECLARE_DYNAMIC与IMPLEMENT_DYNAMIC的定义如下:

#define _DECLARE_DYNAMIC(class_name)

public:

static AFX_DATA CRuntimeClass class##class_name;

virtual CRuntimeClass* GetRuntimeClass() const;

3.动态创建宏

动态创建宏DECLARE_DYNCREATE(class_name)和IMPLEMENT_DYNCREATE(class_name,base_class_name)是动态支持的一个超集,除了基本的类型识别机能,使用动态创建宏能够使CObject的派生类具有在运行时动态创建对象的功能。注意,支持动态创建的类还必须有一个默认的不带参数的构造函数,用于创建一个稳定的对象。应用程序框架利用这个机能动态创建新的对象,例如当序列化其间从磁盘读取一个对象时,应用程序框架将利用文档类、视图类和框架类的动态创建功能来动态创建它们的运行时对象。

4.序列化宏

序列化宏DECLARE_SERIAL()和IMPLEMENT_SERIAL()是动态支持和动态创建的一个超集,除了基本的类型识别能力和动态创建能力,使用序列化宏能够使从CObject派生而来的类具有序列化功能。

5.应用

请看下面的例子:从CObject派生出一个新类CNewClass,并使用RUNTIME_CLASS宏的基本对象判断能力。

//声明

//NewClass.h

class CNewClass:public Cojbect

{

DECLARE_DYNAMIC(CNewClass)

Public:

void NewFunction();

};

//实现

//NewClass.cpp

#include "NewClass.h"

IMPLEMENT_DYNAMIC(CNewClass,CObject)

void CNewClass::NewFunction()

{

CObject* pObj=new CNewClass;

if(pObj->IsKindOf(RUNTIME_CLASS(CNewClass)))

AfxMessageBox("这是一个CNewClass的对象");

else

AfxMessageBox("这不是一个CNewClass的对象");

delete pObj;

}




添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.