我有一个项目,我对 boost::signals2 有疑问。举一个简短的例子,我将代码缩短为以下三个类(所有类都被简化):
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 to boost::signals2::slot1<void, SignalArgs, boost::function<void(SignalArgs)> >&
),但没有成功。
我监督了什么吗?