gpt4 book ai didi

c++ - boost::asio 如何将成员函数传递给 acceptor.async_accept()

转载 作者:行者123 更新时间:2023-11-30 05:07:25 29 4
gpt4 key购买 nike

我试图将成员函数作为 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com