我有一個項目,其中boost :: signals2有問題。舉一個簡單的例子,我縮短了代碼以下三個類(所有的類都是簡體):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);
};
在編譯時,我總是得到錯誤 錯誤:調用「插件沒有匹配功能: :addEventHandler(boost :: _ bi :: bind_t,boost :: _ bi :: list2,boost :: arg < 1> >>)'
好吧,錯誤很簡單:編譯器沒有找到函數具有相同類型和數量的參數。我試圖通過定義一個確切類型爲Plugin::EventHandler
(它本身是boost::signals2::slot1<void, SignalArgs, boost::function<void(SignalArgs)> >&
的typedef)的對象來繞過這個問題,但沒有成功。
我有沒有監督過什麼?
選項1的工作完美。謝謝! – Felix 2014-09-03 11:07:28
@PiotrS。即使你認爲這不值得,也要小心地發表一個答案。在評論中發佈答案材料會誤導問題,就好像它沒有答案一樣,但它會阻止其他人回答,因爲......他們會「偷」你的評論...... – sehe 2014-09-03 12:53:00
@PiotrS。對於我來說,沒有'std :: {bind,placeholders :: _ 1}'的差異。也許你正在使用MSVC並從它的擴展中受益,它允許臨時綁定到非const引用? – sehe 2014-09-03 13:38:59