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