将抽象重写的方法传递给Boost::Thread

Passing abstract overridden method to Boost::Thread

本文关键字:Boost Thread 抽象 重写 方法      更新时间:2023-10-16

我有一个抽象类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.