高手请指教
在多文档的程序中, InitInstance()这个关键的初始化函数中有这样一段代码
************************************************************
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_PAINTETYPE,
RUNTIME_CLASS(CPainterUsePatternDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CPainterUsePatternView));
AddDocTemplate(pDocTemplate);
*************************************************************
里面的RUNTIME_CLASS没有见过,是什么东东?
在AFX.H里面有源代码
*************************************************************
#define RUNTIME_CLASS(class_name) ((CRuntimeClass*)(&class_name::class##class_name))
#define ASSERT_KINDOF(class_name, object) /
ASSERT((object)->IsKindOf(RUNTIME_CLASS(class_name)))
*************************************************************
这个定义我又有不明白,"##"是什么东东??在MSDN中查到
*************************************************************
#define paster( n ) printf( "token" #n " = %d", token##n ) int token9 = 9;
//将paster(n)定义为printf( "token" #n " = %d", token##n )
//那么
paster( 9 );//这个函数等同于以下函数
printf( "token" "9" " = %d", token9 );
//就变成了
printf( "token9 = %d", token9 );
***********************************************************
我们明白了'##'实际上就是连接两个字符串,回到刚才的定义
#define RUNTIME_CLASS(class_name) ((CRuntimeClass*)(&class_name::class##class_name))
宏定义RUNTIME_CLASS(class_name)为((CRuntimeClass*)(&class_name::class##class_name))
class_name是一个参数,代表了类名
CRuntimeClass是一个结构
将class_name类的一个叫做class##class_name 的结构的地址取出将其类
型转换为struct CRuntimeClass *类型
(待续)