我正在嘗試關注this指南,瞭解如何在QT上使用Socket.IO CPP客戶端。我不明白的是,這些行之一:Socket.IO CPP客戶端示例(使用std :: bind)
auto onm = std::bind(onMessage, _1, _2, _3, _4);
h.socket()->on("message", onm);
這是應該調用這個函數:
void OnNewMessage(std::string const& name,message::ptr const& data,bool hasAck,message::ptr &ack_resp)
我明白std::bind(&MainWindow::OnNewMessage
是函數的名稱和_1,_2,_3,_4
是std::placeholder
對象但我不明白的是爲什麼第二個參數this
被傳遞。
UPDATE: 我的代碼修修補補一點,在全球範圍內(更新上述代碼)外側移動的onNewMessage
方法。我就遇到了這個錯誤:
no matching function for call to
'sio::socket::on(const char [8], std::_Bind<void (*(std::_Placeholder<1>,
std::_Placeholder<2>, std::_Placeholder<3>, std::_Placeholder<4>)
)(const std::__cxx11::basic_string<char>&,
const std::shared_ptr<sio::message>&, bool, std::shared_ptr<sio::message>&)>&)'
h.socket()->on("message", onm);
^
所以我檢查的on
方法聲明:
void socket::on(std::string const& event_name,event_listener_aux const& func)
這裏是event _listener_aux
在socket
類本身就是一個單獨的頭文件中聲明:
typedef std::function<void(const std::string& name,message::ptr const& message,bool need_ack, message::list& ack_message)> event_listener_aux;
TIA
你的問題與套接字編程無關,但是當調用非靜態成員函數時應該如何使用'std :: bind'。如果您更改了帖子的標題,那麼您肯定會很快收到答案。 – PaulMcKenzie
請參閱[文檔和示例程序](http://en.cppreference.com/w/cpp/utility/functional/bind) – PaulMcKenzie
@PaulMcKenzie我看到了示例程序,並且它們沒有爲'f1'分類。這就是讓我困惑的原因。 –