我想了解如何将 boost::aio::async_connect 与 lambda 一起使用。提升版本 1.68
我可以使用 std::bind 但不能使用 lambda,这真的很奇怪。如果我使用 std::bind,它可以工作。但是当我使用 lambda 时,它构建失败,并说“未满足 IteratorConnectHandler 类型要求。
std::bind 版本(有效)
void SslClient::connect(boost::asio::ip::tcp::resolver::results_type results) {
auto sp = shared_from_this();
boost::asio::async_connect(ws->next_layer().next_layer(),
results.begin(),
results.end(),
std::bind(
on_connect,
std::placeholders::_1)
);
}
lambda 版本(不工作)
void SslClient::connect(boost::asio::ip::tcp::resolver::results_type results) {
auto sp = shared_from_this();
boost::asio::async_connect(ws->next_layer().next_layer(),
results.begin(),
results.end(),
[&, sp](boost::system::error_code ec) {
if (ec) {
return;
}
ws->next_layer().async_handshake(boost::asio::ssl::stream_base::client,
[&, sp](boost::system::error_code ec1) {
handShake(ec);
});
}
);
}
那么如何在这里使用 lambda 呢?