在研究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