Re: [問題] 一般指標轉函數指標
: 推 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
12/30 23:34, 1F
推
12/31 15:51, , 2F
12/31 15:51, 2F
→
12/31 15:51, , 3F
12/31 15:51, 3F
討論串 (同標題文章)