Re: [問題] 一般指標轉函數指標

看板C_and_CPP作者 (jhchou)時間16年前 (2009/12/30 23:32), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串3/3 (看更多)
: 推 jhchou:fun1是某個class的member function嗎? 12/30 16:00 : → tyc5116:不是~ 12/30 17:03 : 推 jhchou:ThreadStart的引數要class的member function才行喔 12/30 17:12 : → jhchou:寫個class,讓一個成員函式去呼叫fun1 把這個函式當參數 12/30 17:16 : → jhchou:丟給ThreadStart試試看 12/30 17:17 : → tyc5116:不是很懂... 12/30 18:29 剛剛寫了一隻小程式試了一下, 先定義一個全域的函式 void fun() { cout<< 1 << endl; } 接著在main中 ThreadStart^ ts = gcnew ThreadStart(&fun); Thread^ t = gcnew Thread(ts); t->Start(); 可以compile通過並且順利執行 所以我推文說ThreadStart參數必須要是member function是錯的 接著學原po的做法 class ActTB { public: void *fptr; } 然後在main中 ActTB a; a.fptr = &fun; 然後把a,fptr丟去當ThreadStart的參數 情況就跟原Po一樣不管怎麼轉型都沒辦法通過編譯 所以最後只好為fun寫個wrap class ref class ActTB { private: void (*fptr)(); public: ActTB(void (*f)()) : fptr(f) {}; void Do() {fptr();}; } ActTB^ a = gcnew ActTB(&fun); ThreadStart^ ts = gcnew ThreadStart(a, &(ActTB::Do)); 這樣就可以通過編譯並且正常執行 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.216.148.185

12/30 23:34, , 1F
msdn 上的範例好像就是後者這種方法
12/30 23:34, 1F

12/31 15:51, , 2F
謝謝,我再試著了解看看,MSDN寫的兩種我一開始看不懂他
12/31 15:51, 2F

12/31 15:51, , 3F
這種寫法的用意...原來是這樣子....@@
12/31 15:51, 3F
文章代碼(AID): #1BEtAR59 (C_and_CPP)
文章代碼(AID): #1BEtAR59 (C_and_CPP)