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.



留言

這個網誌中的熱門文章

[Antergos] disable touchpad

[Editor] 入坑 Atom => Markdown 轉 PDF