這是測試用的, 在實戰中, 請不要這麼用 (除非你有把握完全在你的掌握中, 這其實不容易確定), 在最單純的情形下, member function 其實和一般的 c function 沒什麼不同, 取得 function 位址, 傳入某個 object 位址就和呼叫那個 member function 一樣。
ex:
A a;
a.func()
equal
func(&A);
b.cpp
1 #include <cstdio>
2 using namespace std ;
3
4 class A
5 {
6 public :
7 A ( )
8 {
9 i_ = 10 ;
10 }
11 void inc ( )
12 {
13 + + i_ ;
14 }
15 void func1 ( )
16 {
17 printf ( "i: %d\n " , i_ ) ;
18 }
19 private :
20 int i_ ;
21 } ;
22
23 typedef void ( * CBf ) ( A * a ) ;
24
25 int test_cbf ( CBf cbf )
26 {
27 A a ;
28 ( * cbf ) ( & a ) ;
29 a .inc ( ) ;
30 ( * cbf ) ( & a ) ;
31 }
32
33 int main ( int argc , char * argv [ ] )
34 {
35 void ( A : : * p ) ( ) = & A : : func1 ;
36 unsigned int addr = * ( ( unsigned int * ) & p ) ;
37
38 test_cbf ( ( void ( * ) ( A * ) ) ( addr ) ) ;
39
40 return 0 ;
41 }
執行結果:
descent@descent-u:tmp$ ./a.out
i: 10
i: 11
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。