在研究orbSlam2 的工程中遇到了一種比較奇怪的構造線程的方式。
僞代碼如下:
std::thread* mptLocalMapping;
class LocalMapping
{
void localMapping::Run() //這個函數是沒有輸入參數的
{
//各種操作
}
};
LocalMapping* mpLocalMapper = new LocalMapping();
mptLocalMapping = new thread(&LocalMapping::Run,mpLocalMapper);
可以看到這裡的thread是傳入了一個成員函數指針,在這種情況下,其後傳入的首個參數必須是一個特定的對象,這個對象是定義了(或引用,或指向對象的指針)這個成員函數。
在這個例子中,thread(&fn, arg1,arg2,…)中的arg1的類型必須是LocalMapping 或者LocalMapping& 或者LocalMapping*
參考:http://www.cplusplus.com/reference/thread/thread/thread/
http://en.cppreference.com/w/cpp/thread/thread/thread