今天的話題比較有意思,如何獲取乙個非 static 成員函式的指標?考慮以下**:
classa
;voida::foo(void)
也就是說,如何獲取 a::foo 的指標?
那位說了:這有何難?乙個 typedef 全搞定!
typedef
void(a::*fooptr)(void);
fooptrfunc=&a::foo;
且慢,我還沒說完呢。我要把這個指標用於 thunk 技術,所以我希望得到乙個 void* 型別的指標。這樣一來,如果再使用乙個型別轉換的話,那麼就會得到乙個 c2440 的編譯錯誤,因為 c++ 是強型別的,不允許我們胡作非為。
於是我們只能搞些歪門邪道了,且看:
方案一 彙編
void*func=null;
__asm
優點:效率高,無廢話。
缺點:可移植性差。
方案二 stdio
void*func=null;
charaddr[9];
sprintf(addr,"%p",&a::foo);
sscanf(addr,"%p",&func);
優點:完全可移植。
缺點:效率低,而且有些無厘頭。
另外需要指出的是,對於 vc 的 debug 配置而言,以上的兩種方式獲取的都不是 a::foo 的真實位址,而是 ilt 的位址。因此如果我們需要的是真實位址的話,還需要另外解析 ilt 表項的**。
獲取成員函式的指標
今天的話題比較有意思,如何獲取乙個非 static 成員函式的指標?考慮以下 c class a void a foo void 也就是說,如何獲取 a foo 的指標?那位說了 這有何難?乙個 typedef 全搞定!c typedef void a fooptr void fooptr func...
C 中怎麼獲取類的成員函式的函式指標?
用乙個實際 來說明。class a static member void nonstatic nonstatic member virtual void virtualmember virtual member int main 可以參考 c primer 3rd 第532頁13.6指向類成員的指標...
指向成員函式的指標
指向成員函式的指標 取乙個非靜態成員函式的位址,如果該函式是nonvirtual,則得到的結果是它在記憶體中真正的位址。然而這個值也不是完全的,它也需要被繫結於某個class object的位址上,才能夠通過它呼叫該函式。所有的非靜態成員函式都需要物件的位址 以引數this指出 乙個指向成員函式的指...