首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

宏,该怎么处理

2012-03-03 
宏在看侯捷的书,看到这个代码,问一下:宏定义里面的public是什么作用的?#define RUNTIME_CLASS(class_name)


在看侯捷的书,看到这个代码,问一下:宏定义里面的public是什么作用的?
#define RUNTIME_CLASS(class_name) \
  (&class_name::class##class_name)

#define DECLARE_DYNAMIC(class_name) \
public: \
  static CRuntimeClass class##class_name; \
  virtual CRuntimeClass* GetRuntimeClass() const;

#define _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; } \
宏里定一了两个函数,是不是代表了这个宏完成这两个函数的功能?_IMPLEMENT_RUNTIMECLASS完成了后面的一系列动作?
#define IMPLEMENT_DYNAMIC(class_name, base_class_name) \
  _IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, NULL)

[解决办法]
宏定义由预编译器进行处理,就是一个简单的替换,如果你自己手动替换一下就能够看得很清楚了
[解决办法]
public这个关键字在C++的含义不是很明显么?就是累成员可以被其他类、函数使用啊?
宏自然不可能完成所谓函数的功能,他只避免你没定义一个类都写那套函数
[解决办法]
宏只是写出了替换文本,只有替换后才具有语义,一般从宏的名字以及相关的注释里面可以看出来使用该宏的方式
#define DECLARE_DYNAMIC(class_name)
这个宏看似是用于定义一类 类的,只要使用该宏来定义的类都具有至少
static CRuntimeClass class##class_name;
virtual CRuntimeClass* GetRuntimeClass() const; 
两个接口

[解决办法]
public说明当在类内部用这个宏时,跟在public之后的部分都算作类的public成员。

热点排行
Bad Request.