1

我有一个抽象类,simModbusServer它有一个抽象方法,run()。它也有这个方法:

void simModbusServer::start() {    
serverThread = boost::thread(&simModbusServer::run);
}

这当然是在 的子类中调用的simModbusServer,我是否正确假设这将在子类run()方法上创建一个覆盖抽象方法的线程simModbusServer

4

1 回答 1

2

不,你必须使用boost::bind,因为run()它是一个成员函数,它接受一个隐式this指针:

#include <boost/bind.hpp>

void simModbusServer::start() {    
    serverThread = boost::thread(
        boost::bind(&simModbusServer::run, this));
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}

使用较新版本的 Boost,您似乎也可以this直接将第二个参数作为构造函数传递boost::thread(如果您使用 ,您会这样做std::thread),如下所示:

void simModbusServer::start() {    
    serverThread = boost::thread(&simModbusServer::run, this);
}

在这种情况下,您将不需要 Boost.Bind。

于 2013-06-01T14:34:07.380 回答