《深入浅出MFC》中的宏:IMPLEMENT_RUNTIMECLASS解决办法

《深入浅出MFC》中的宏:__IMPLEMENT_RUNTIMECLASS
《深入浅出》第3章对RTTI进行了仿真。

其中,用到了_IMPLEMENT_RUNTIMECLASS宏,定义如下:


======================

#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   ;   }   \  

==========================

其中的:static   char   _lpsz##class_name[]   =   #class_name;   是什么意

思啊?_lpsz##class_name[]从名字看是指针,但又好像是数组。  

“#class_name "将”# "和   “class_name "组合起来又是何意?是对左面

的指针赋值?或者说是对数组初始化?还是其他什么?

请达人赐教。




------解决方案--------------------
假如你的类叫做test
那么展开之后的结果就是
char _lpsztest[]= "test "
用于在动态识别的时候判断是否是一个类.
------解决方案--------------------
依稀记得#是用来连接字符串的
------解决方案--------------------
转化为字符串
------解决方案--------------------
## 是连接_lpsz和class_name,成为一个数组名.
# 是将后面的class_name转化为一个C中以NULL结尾的字符数组. (与_lpsz 相对应.)