c++ thread pass member function pointer
紀錄一下別人踩的坑。
同學在用 C++ 的 thread 時,一直編譯不過,
最後發現是 thread 傳入的 function poiter 的 member 的緣故。
和一般的 function pointer ,
member function pointer 要再傳 this pointer 進去
( 因為 thread 才會知道要拿哪個物件執行 function )
所以要這樣傳:
animal :: walk(){ this->pos++; }
...
animal(){
thread(&animal::walk , this);
}
...
其實啊,稍微有一點物件導向的常識應該都會知道,member function 其實都只是個 pointer,
在許多物件導向語言都把 this 的傳入省略掉了,
他的原型應該是 animal_inst.walk(animal_inst); 要把物件本身傳進去。
感覺已經不會寫 cpp 了。。
應該要找時間把那篇醜醜的 C 聊天室,改成物件導向風格了,
因為一堆 global 好醜。。
ref : so.
留言
張貼留言