VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 611|回复: 4

问个C++的问题,还请赐教

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-4 04:00:01 | 显示全部楼层 |阅读模式
以下是_IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew)的定义部分:
static char _lpsz##class_name[] = #class_name; \
        CRuntimeClass class_name::class##class_name = { \
                _lpsz##class_name, sizeof(class_name), wSchema, pfnNew,       RUNTIME_CLASS(base_class_name), NULL }; \
        static AFX_CLASSINIT _init_##class_name   (class_name::class##class_name); \
        CRuntimeClass* class_name::GetRuntimeClass() const \
                { return &class_name::class##class_name; } \

AFX_CLASSINIT::AFX_CLASSINIT(CRuntimeClass* pNewClass)
{
        pNewClass->m_pNextClass = CRuntimeClass::pFirstClass;
        CRuntimeClass::pFirstClass = pNewClass;
}


其中以下两句是什么意思啊,能起到什作用啊
static AFX_CLASSINIT _init_##class_name   (class_name::class##class_name); \
CRuntimeClass* class_name::GetRuntimeClass() const \
                { return &class_name::class##class_name; }

小弟先谢过了
回复

使用道具 举报

0

主题

30

帖子

22.00

积分

新手上路

Rank: 1

积分
22.00
发表于 2020-1-5 17:09:01 | 显示全部楼层
##是字符串连接符,在参数宏中,例如:

#define FUNCTION_NAME(class_name) _init_##class_name

FUNCTION_NAME(CWnd)展开后就是
_init_CWnd
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-1-7 19:54:01 | 显示全部楼层
这一点我懂,我主要是不懂得
static AFX_CLASSINIT _init_##class_name   (&class_name::class##class_name); \
CRuntimeClass* class_name::GetRuntimeClass() const \
                { return &class_name::class##class_name; }

这里前后出现的&class_name::class##class_name,他们之间有什么联系.并且,这里的static它具体起到什么作用,声明一个静态全局变量吗?
回复

使用道具 举报

0

主题

30

帖子

22.00

积分

新手上路

Rank: 1

积分
22.00
发表于 2020-1-7 23:00:01 | 显示全部楼层
你如果看过<<深入浅出MFC>>就会很明白了,
这是为这个类声明并定义一个静态的运行时对象.
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-1-10 13:09:01 | 显示全部楼层
我就是在看深入浅出啊.但是这部分没看懂啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表