1. 程式人生 > >成員函式指標和其他型別的強制轉換,使用一般指標呼叫成員函式

成員函式指標和其他型別的強制轉換,使用一般指標呼叫成員函式

 成員函式指標和其他型別之間的轉換,參見如下示例:

class test
{
public:
    
void t(){};
}
;

typedef   
void   (test::*pMemFnction)(); 

int main()
{
    pMemFnction   method 
=&test::t;     //成員函式指標定義並初始化

    
int method_ptr   =*(int*)&method;   //強制轉換

    pMemFnction   m 
=*(pMemFnction *)&method_ptr;  //強制轉換, OK

    
return
0;
}

轉換的作用,一方面可能因為特殊的需求,同時也可以方便除錯和檢查,例如輸出函式地址等。也可以使用轉換後的指標呼叫成員方法,比如:

class test
{
public:
    
void t(){cout<<"This is a test!"<<endl;}
}
;

typedef   
void   (test::*pMemFnction)(); 

int main()
{
    pMemFnction   method 
=&test::t;    //取成員函式
int*method_ptr   =  (int*)&method;  //強制轉換為int *

    
    test t;
    (t.
**(pMemFnction *)method_ptr)();  //使用 method_ptr  呼叫其成員方法
return0;
}