boost::signals2 に問題があるプロジェクトがあります。簡単な例を示すために、コードを次の 3 つのクラスに短縮しました (すべてのクラスが簡略化されています)。
class SignalArgs
{
int a_number_;
};
class Plugin
{
protected:
typedef boost::signals2::signal<void (SignalArgs& args)> Event;
public:
typedef Event::slot_type EventHandler;
public:
void addEventHandler(EventHandler& handler)
{
onEvent.connect(handler);
}
private:
Event onEvent;
};
class PluginManager_
{
public:
PluginManager_()
{
p = new Plugin();
// the error occurs in the following line
p->addEventHandler(boost::bind(&PluginManager_::plugin_event_handler, this, _1));
}
private:
Plugin* p;
void plugin_event_handler(SignalArgs& args);
};
コンパイル中に、常に次のエラーが表示 されます: 'Plugin::addEventHandler(boost::_bi::bind_t, boost::_bi::list2, boost::arg<1> > >)' の呼び出しに一致する関数はありません
さて、エラーは単純です: コンパイラは、同じ型とパラメータの数を持つ関数を見つけられませんでした. 正確なタイプのオブジェクトを定義してそれをバイパスしようとしましたがPlugin::EventHandler
(それ自体は typedef ですboost::signals2::slot1<void, SignalArgs, boost::function<void(SignalArgs)> >&
)、成功しませんでした。
私は何かを監督しましたか?