作者jhchou (jhchou)
看板C_and_CPP
標題Re: [問題] 一般指標轉函數指標
時間Wed Dec 30 23:32:41 2009
: 推 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
推 ledia:msdn 上的範例好像就是後者這種方法 12/30 23:34
推 tyc5116:謝謝,我再試著了解看看,MSDN寫的兩種我一開始看不懂他 12/31 15:51
→ tyc5116:這種寫法的用意...原來是這樣子....@@ 12/31 15:51