DYNAMIC_DOWNCAST、STATIC_DOWNCAST、CRuntimeClass和IsKindOfDYNAMIC_DOWNCAST(class, pointer ):如果pointer指針?biāo)赶虻膶?duì)象是class類型的,就返回這個(gè)指針。否則返回NULL 例如 你獲取到一個(gè)指針 XXX *pointer; 你想判斷它是不是指向某個(gè)類 ,例如 A 這個(gè)類 A* p= DYNAMIC_DOWNCAST(A, pointer ); 如果pointer是指向A這個(gè)類則返回此指針,否則返回空 CRuntimeClass和IsKindOf的關(guān)系 CRuntimeClass在MFC中的作用很重要,因?yàn)镸FC利用它來進(jìn)行類的動(dòng)態(tài)確定,即是通過類變量來判定該變量是否為某一類的實(shí)例。由于指針的類型是可以轉(zhuǎn)換的,所以時(shí)常會(huì)出現(xiàn)從A到B的轉(zhuǎn)換導(dǎo)致錯(cuò)誤。而在MFC的各種書籍中對(duì)CRuntimeClass的介紹是比較少的,在這里總結(jié)它的一些用法。 動(dòng)態(tài)確定類
BOOL
利用CRuntimeClass來進(jìn)行判定,如果你生成的類是以CFrameWnd為基礎(chǔ)的,你可以使用該成員函數(shù)來判定。下面舉一個(gè)例子來加深了解。 |
|