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

时间:2013-06-01 14:28:27

标签: c++ multithreading boost

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

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

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

1 个答案:

答案 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。