作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图将成员函数作为 AcceptHandler 传递给 boost::asio 的 async_accept() 方法。我收到一个编译错误:
AcceptHandler type requirements not met
来自链接行:
// If you get an error on the following line it means that your handler does not meet the documented type requirements for a AcceptHandler.
documentation说处理程序必须如下所示:
void accept_handler(const boost::system::error_code& error) //documentation
{
if (!error)
{
// Accept succeeded.
}
}
我的成员函数如下所示:
void WifiConnector::onAccept(const boost::system::error_code &ec) //my code
{
if (ec) {
std::cout << ec.message();
return;
}
socket.async_read_some(boost::asio::buffer(mBuffer), &WifiConnector::readHandler);
}
我觉得这没什么区别。
但我必须像这样调用 acceptor.async_accept() 方法:
acceptor.async_accept(socket, &WifiConnector::onAccept); //my code
代替
acceptor.async_accept(socket, accept_handler); //documentation
因为我假设它是一个成员函数。如果我尝试像文档建议的那样传递它:
acceptor.async_accept(socket, onAccept); //my code
有一个错误说:没有重载函数的实例。
错误是因为我以错误的方式传递成员函数还是我做错了什么?
编辑:我正在从包含接受器等的对象中调用 async_accept() 方法。
最佳答案
boost 文档明确提到了如何将非静态方法传递给接受器 here
以上链接的摘录:
void my_class::accept_handler(
const boost::system::error_code& ec)
{
...
}
...
acceptor.async_accept(...,
boost::bind(&my_class::accept_handler,
this, boost::asio::placeholders::error));
如果你的类,你可以用实例替换 this
。
关于c++ - boost::asio 如何将成员函数传递给 acceptor.async_accept(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47455012/
我是一名优秀的程序员,十分优秀!