成員函式指標和其他型別的強制轉換,使用一般指標呼叫成員函式
阿新 • • 發佈:2019-02-19
成員函式指標和其他型別之間的轉換,參見如下示例:
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
}
轉換的作用,一方面可能因為特殊的需求,同時也可以方便除錯和檢查,例如輸出函式地址等。也可以使用轉換後的指標呼叫成員方法,比如:
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;
}