declare_dynamic
implement_dynamic
runtime_class
declare_dyncreate
cruntimeclass
cruntimeclass與其說類,不如說是個結構體。每乙個從mfc類派生出的類都維護了乙個cruntimeclass型別變數。所有類的cruntimeclass型別變數構建了乙個鍊錶。上述mfc之所以能確定使用者定義類的名字,其實就是在這個鍊錶資訊中找到的。
runtime_class是乙個類成員指標,指向使用者定義類的cruntimeclass成員。
這裡順便提一下虛函式形成的動態識別,注意,虛函式提供的多型性雖然也是執行時多型性。但是它畢竟有個前提,就是,類層次中所有的類的名字在編譯時已經確定了。這顯然並無法滿足上述mfc動態建立物件的需要。
mfc中所有的類都從cobject類派生,好多常用類都從ccmdtarget類派生,估計也是為了構造一張完整的cruntimeclass網,使所有的mfc派生類都能被動態識別和建立。
MFC中的執行時型別識別 RTTI
rtti是runtime type identification的縮寫,中文名為 執行時型別識別 mfc早在編譯器支援rtti之前,就有了這種能力。我們現在要以相同的手法,在console程式中 出來。我希望我的類庫具備iskindof 的能力,能在執行期偵測到某個物件是否屬於某個類,並傳回true...
執行時型別識別
執行時的型別識別 rtti 分為兩類 1.typeid操作符 2.dynamic cast操作符 先看第二種 dynamic cast完成將基類型別的指標或者引用安全轉化為派生類型別的指標和引用。對於指標,如果轉化失敗,則將指標置為null,對於引用型別,因為沒有null,所以直接丟擲bad cas...
執行時型別識別
q1 執行時型別識別 rtti 簡述 通過下面兩個操作符實現rtti 1 typeid 操作符,返回指標或引用所指物件的實際型別 2 dynamic cast操作符,將基類型別的指標或引用安全的轉換為派生型別的指標或引用對於帶虛函式的類,在執行時執行rtti操作符,對其他型別,在編譯時計算rtti操...