我正在尝试关注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'分类。这就是让我困惑的原因。 –