MFCのRUNTIMECLASSの検討


よろしくお愿いします
マルチドキュメントのプログラムでは、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#)と定義する
//では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クラスの1つはclassと ばれていますnameの のアドレスを り してクラスを
タイプをstruct CRuntimeClass*タイプに
 
( き)