使用 websocketpp 时“调用绑定没有匹配的函数”
Posted
技术标签:
【中文标题】使用 websocketpp 时“调用绑定没有匹配的函数”【英文标题】:"No matching function for call to bind" while using websocketpp 【发布时间】:2012-05-24 08:59:14 【问题描述】:我正在制作一个 (c++) 应用程序,它是一个 websocket 客户端和 websocket 服务器。为了能够做到这一点,我正在使用库 websocketpp。为了使应用程序既是客户端又是服务器,我希望 endpoint1.run()
和 endpoint2.listen(port)
是多线程的。这就是问题所在。
通常(单线程)我使用:endpoint.listen(port);
有效。
为了使其成为我使用的多线程:
boost::thread t(boost::bind(&server::listen, &endpoint, port));
sleep(1);
cout << "After thread! \n";
t.join();
但是,我得到了错误:
main.cpp:116: error: no matching function for call to ‘bind(<unresolved overloaded function type>, websocketpp::server*, uint16_t&)’
server::listen
是一个重载函数,我应该在绑定中以不同的方式调用它吗?
【问题讨论】:
是否有多个 server::listen 方法? 是的,四个。我怎样才能指向正确的? 这很丑,但可能。请参阅下面答案中的链接。 【参考方案1】:看看boost documentation。有一个很好的例子。 您需要自己解决歧义。
【讨论】:
【参考方案2】:对于那些仍然想知道如何实现的人:
void(websocketpp::role::server<websocketpp::server>::*f)(uint16_t,size_t) = &websocketpp::role::server<websocketpp::server>::listen;
boost::thread t(f, &endpoint, port, 1); //No need to use boost::bind here
然后调用 t.detach() 或 endpoint.stop() 和 t.join()
【讨论】:
以上是关于使用 websocketpp 时“调用绑定没有匹配的函数”的主要内容,如果未能解决你的问题,请参考以下文章
websocketpp 和 boost.asio 有啥区别?
未设置 set_tls_init_handler 时 websocketpp 如何处理连接?
websocketpp |无法设置 on_close/打开处理程序