使用 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(&lt;unresolved overloaded function type&gt;, websocketpp::server*, uint16_t&amp;)’

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 asio监听错误

websocketpp 和 boost.asio 有啥区别?

未设置 set_tls_init_handler 时 websocketpp 如何处理连接?

websocketpp |无法设置 on_close/打开处理程序

如何使用 websocket websocketpp 发送和接收消息?

在 Windows 上使用 websocketpp 和 MySQL 提升构建错误