我正在尝试按照Any way to make nice antialiased round corners for images in python?指南学习如何在QT上使用Socket.IO CPP客户端。我不明白的是其中一条:
$(document).ready(function(){
$("#bs-navbar-search").hide();
$('#show').click(function(){
$("#bs-navbar-search").show();
});
$('#toggle').click(function(){
$("#bs-navbar-search").toggle();
});
});
应该调用此函数:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="show">Show</button>
<button id="toggle">Toggle</button> //just for a test
<div class="collapse navbar-collapse searchbar-navbar" id="bs-navbar-search">
<form class="navbar-form navbar-left" role="search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search" id="navbar-search-box">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</div>
我理解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
所以我检查了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
TIA
答案 0 :(得分:3)
this
需要传递给std::bind
,因此代码知道需要调用哪个类的方法。
在这种情况下,this
是当前的类,但是你可以有另一个类的指针,它会调用它的OnNewMessage
函数。