我有一个抽象类,simModbusServer
它有一个抽象方法,run()
。它也有这个方法:
void simModbusServer::start() {
serverThread = boost::thread(&simModbusServer::run);
}
这当然是在 的子类中调用的simModbusServer
,我是否正确假设这将在子类run()
方法上创建一个覆盖抽象方法的线程simModbusServer
?
我有一个抽象类,simModbusServer
它有一个抽象方法,run()
。它也有这个方法:
void simModbusServer::start() {
serverThread = boost::thread(&simModbusServer::run);
}
这当然是在 的子类中调用的simModbusServer
,我是否正确假设这将在子类run()
方法上创建一个覆盖抽象方法的线程simModbusServer
?
不,你必须使用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。