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に、のコンストラクターに 2 番目の引数として直接渡すこともできるようですboost::thread(これは、 を使用していた場合に行うことですstd::thread)。

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

その場合、Boost.Bind は必要ありません。

于 2013-06-01T14:34:07.380 に答える