Re: [問題] 求助 class 內的function pointer用法

看板C_and_CPP (C/C++)作者 (我愛阿蓉)時間16年前 (2009/09/02 23:05), 編輯推噓4(4014)
留言18則, 3人參與, 最新討論串2/6 (看更多)
我隨意的寫了一個程式 變數都亂曲的笑笑就好 #include <iostream> using namespace std; class A; typedef void(A::*PTR)(int,int); class A { public: A(){} void QQ(int a,int b){cout<<a<<b;} void XD( PTR P){ (this->*P)(5,6);} void DO() { XD(&A::QQ); } }; int main() { A T; T.DO(); return 0; } 這樣是可以run的 是不是你想要的?? 有錯請各位多指教 ps.有誰知道我寫this->這個 為啥不寫會錯= = 我想不透 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.207.187 ※ 編輯: QQ29 來自: 140.113.207.187 (09/02 23:06)

09/02 23:10, , 1F
是的,這就是我要的! 很謝謝你!
09/02 23:10, 1F

09/02 23:31, , 2F
不過我有個問題,為什麼要用typedef void(A::*PTR)(int,int)
09/02 23:31, 2F

09/02 23:33, , 3F
可以在void XD( void (*qq)(int,int) ){ (this->*qq)(5,6);}
09/02 23:33, 3F

09/02 23:34, , 4F
這樣會錯~不過我不知道錯在哪....
09/02 23:34, 4F

09/02 23:38, , 5F
重點是 A::* 這個東西要寫出來。
09/02 23:38, 5F

09/02 23:39, , 6F
member function pointer 跟一般 fp 不是一樣的東西。
09/02 23:39, 6F

09/02 23:42, , 7F
文末的問題,是 this ->* P 這樣拆開來看,->* 是運算子。
09/02 23:42, 7F

09/02 23:43, , 8F
比較常見的參數列是 (A *obj, PTR P) 或 (A &obj, PTR P)
09/02 23:43, 8F

09/02 23:44, , 9F
然後用 obj.*P 或 obj->*P 去 invoke。
09/02 23:44, 9F

09/02 23:50, , 10F
那這樣要T.DO(&T);這樣寫嚕?
09/02 23:50, 10F

09/02 23:58, , 11F
那如果不用typedef void(A::*PTR)(int,int);該怎改寫?
09/02 23:58, 11F

09/03 00:15, , 12F
t大有說了 A::* 你*qq要改成A::*qq
09/03 00:15, 12F

09/03 00:27, , 13F
是的,我等會試試看,我想我需要消化一下。
09/03 00:27, 13F

09/03 00:29, , 14F
真的耶! 如果不用typedef void (A::*PTR)(int,int);
09/03 00:29, 14F

09/03 00:30, , 15F
將void XD( PTR P ){ (this->*P)(5,6);}
09/03 00:30, 15F

09/03 00:30, , 16F
改成 void XD( void (A::*qq)(int,int) ){ (this->*qq)(5,6)
09/03 00:30, 16F

09/03 00:31, , 17F
效果一樣! 為什麼要A::*呢?
09/03 00:31, 17F

09/03 00:31, , 18F
定義中又為什麼要 this->* 呢?
09/03 00:31, 18F
文章代碼(AID): #1AdeckEN (C_and_CPP)
文章代碼(AID): #1AdeckEN (C_and_CPP)