这回不向高手求教不行了,那位大侠帮忙给解释一下这个宏。

ybudi 2001-10-09 11:33:51
#define RUNTIME_CLASS(class_name)
((CRuntimeClass*)(&class_name::class##class_name))
我现在不明白的是,这个宏是怎么实现的,他怎么用类名可以找到对象的运行类信息,不应该是一个对象有一个CRunTimeClass对象与他关联么??
还有:((CRuntimeClass*)(&class_name::class##class_name))是什么意思啊??在MFC里有好些这样的定义。
分没问题,我一定会给的,不够还可以加。

...全文
116 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
举例,假如class_name=Test
RUNTIME_CLASS(Test)宏解释为((CRuntimeClass*)(&Test::classTest))
Test::classTest已经在前面定义了,也是通过一些宏来定义的。该变量(我记得好像就是静态变量)是一个CRuntimeClass类的一个实例,定义是并初始化为该类的信息。
((CRuntimeClass*)(&class_name::class##class_name))宏解释为
((CRuntimeClass*)(&Test::classTest))返回该变量的地址
GrayWhite 2001-10-09
  • 打赏
  • 举报
回复
《深入浅出MFC》中有详细的说明,一看就明白。还可以在编译中加/P /EP开关,能把宏展开,不过生成的*.i文件巨大!
karma 2001-10-09
  • 打赏
  • 举报
回复
##的作用是把两个字符串连起来
譬如,
RUNTIME_CLASS(CObject) --> ((CRuntimeClass*)(&class_name::classCObject))
evbs 2001-10-09
  • 打赏
  • 举报
回复
关注,忘记了
蒋晟 2001-10-09
  • 打赏
  • 举报
回复
在类定义中已经定义了class_name::class##class_name。
  • 打赏
  • 举报
回复
DECLARE_DYNCREATE()宏用于声明变量,IMPLEMENT_DYNCREATE用于初始化
ydogg 2001-10-09
  • 打赏
  • 举报
回复
你在mfc的原文件中搜索一下
karma 2001-10-09
  • 打赏
  • 举报
回复
Afx.h
ybudi 2001-10-09
  • 打赏
  • 举报
回复
to karma:
这个我知道,但是我想知道,classCObject在那里,我找不到,为什么??
karma 2001-10-09
  • 打赏
  • 举报
回复
yes, you are right,
RUNTIME_CLASS(CObject) --> ((CRuntimeClass*)(&CObject::classCObject))
ybudi 2001-10-09
  • 打赏
  • 举报
回复
to jiangping zhu:
补充一下:那个变量是指,Test::classTest
ybudi 2001-10-09
  • 打赏
  • 举报
回复
to GrayWhite:
能不能告诉一下在那个章节,我的是,电子书,不好找!!谢谢
to jiangping zhu:
我想知道的就是那个变量在什么地方定义的,我找不到,你能告诉我么,谢谢!!

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧