MFC六大關鍵技術之執行時型別識別(RTTI)

2021-07-10 17:40:35 字數 1555 閱讀 8548

什麼是rtti

執行時型別識別(rtti)即是程式執行過程中知道某個物件屬於某個類。

實現過程

定義cruntimeclass結構體描述類別:

struct cruntimeclass

;

為了實現執行時識別的目的mfc定義了下列兩個巨集:

declare_dynamic / implement_dynamic 

declare_dynamic:把

cruntimeclass

物件新增到類

中,並獲取該物件的地

址的函式。

#define declare_dynamic(class_name) \

public: \

static cruntimeclass class##class_name; \ //##的作用是告訴編譯器將##前後的兩個字串連線起來

virtual cruntimeclass* getruntimeclass() const;

implement_dynamic:將各個物件連線起來:

#define implement_dynamic(class_name, base_class_name) \

implement_runtimeclass(class_name, base_class_name, 0xffff, null)

其中的_

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 = ; \

static afx_classinit _init_##class_name(&class_name::class##class_name); \

cruntimeclass* class_name::getruntimeclass() const \

< \

runtime_class

巨集:

#define runtime_class(class_name) \

(&class_name::class##class_name)

implement_

dynamic的關鍵是使用了下面這個巨集,它完成的工作是將各個類串聯起來:

struct afx_classinit

;

其定義如下:

afx_classinit::afx_classinit(cruntimeclass* pnewclass)

;

MFC六大關鍵技術之執行時型別識別

執行時型別識別 rtti 即是程式執行過程中知道某個物件屬於某個類,我們平時用c 程式設計接觸的rtti一般是編譯器的rtti,即是在新版本的vc 編譯器裡面選用 使能rtti 然後載入typeinfo.h檔案,就可以使用乙個叫typeid 的運運算元,它的地位與在c 程式設計中的sizeof 運運...

MFC中的六大關鍵技術

1 mfc程式的初始化工作 在mfc中所有的類都 於乙個基類 cobject。mfc程式初始化過程中,其實就是虛函式的呼叫的過程,分清呼叫執行的到底是哪乙個具體的虛函式,是父類的虛函式,還是基類的虛函式,都是至關重要的。2 rtti執行時型別識別 mfc程式執行過程中需要對類的型別進行動態的判斷。在...

MFC六大關鍵技術之 三 動態建立

動態建立就是執行時建立指定類的物件,在mfc中大量使用。如框架視窗物件 視物件,還有文件物件都需要由文件模板類物件來動態的建立。我覺得這是每個mfc的學習者很希望理解的問題。初次接觸mfc的時候,很容易有這樣的迷惘。mfc的幾大類不用我們設計也就罷了,但最疑惑的是不用我們例項化物件。本來最直觀的理解...