看板 C_and_CPP 關於我們 聯絡資訊
我隨意的寫了一個程式 變數都亂曲的笑笑就好 #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)
kkroy:是的,這就是我要的! 很謝謝你! 09/02 23:10
kkroy:不過我有個問題,為什麼要用typedef void(A::*PTR)(int,int) 09/02 23:31
kkroy:可以在void XD( void (*qq)(int,int) ){ (this->*qq)(5,6);} 09/02 23:33
kkroy:這樣會錯~不過我不知道錯在哪.... 09/02 23:34
tinlans:重點是 A::* 這個東西要寫出來。 09/02 23:38
tinlans:member function pointer 跟一般 fp 不是一樣的東西。 09/02 23:39
tinlans:文末的問題,是 this ->* P 這樣拆開來看,->* 是運算子。 09/02 23:42
tinlans:比較常見的參數列是 (A *obj, PTR P) 或 (A &obj, PTR P) 09/02 23:43
tinlans:然後用 obj.*P 或 obj->*P 去 invoke。 09/02 23:44
QQ29:那這樣要T.DO(&T);這樣寫嚕? 09/02 23:50
kkroy:那如果不用typedef void(A::*PTR)(int,int);該怎改寫? 09/02 23:58
QQ29:t大有說了 A::* 你*qq要改成A::*qq 09/03 00:15
kkroy:是的,我等會試試看,我想我需要消化一下。 09/03 00:27
kkroy:真的耶! 如果不用typedef void (A::*PTR)(int,int); 09/03 00:29
kkroy:將void XD( PTR P ){ (this->*P)(5,6);} 09/03 00:30
kkroy:改成 void XD( void (A::*qq)(int,int) ){ (this->*qq)(5,6) 09/03 00:30
kkroy:效果一樣! 為什麼要A::*呢? 09/03 00:31
kkroy:定義中又為什麼要 this->* 呢? 09/03 00:31