我有这段代码,不知道我想要实现的目标是否可能。
_acceptor.async_accept(
_connections.back()->socket(),
[this](const boost::system::error_code& ec)
{
_connections.push_back(std::make_shared<TcpConnection>(_acceptor.get_io_service()));
_acceptor.async_accept(_connections.back()->socket(), this_lambda_function);
}
);
一旦套接字被接受,我想重用处理程序(又名 lambda 函数)。这可能吗?有更好的方法来实现这一点吗?
你必须使用 lambda 本身存储一个副本std::function<>
(或类似的东西)作为中介:
std::function<void(const boost::system::error_code&)> func;
func = [&func, this](const boost::system::error_code& ec)
{
_connections.push_back(std::make_shared<TcpConnection>(_acceptor.get_io_service()));
_acceptor.async_accept(_connections.back()->socket(), func);
}
_acceptor.async_accept(_connections.back()->socket(), func);
但你只能通过参考;如果你试图通过价值来捕获它,那是行不通的。这意味着您必须将此类 lambda 的使用限制为通过引用捕获才有意义。因此,如果您在异步函数完成之前离开此范围,它将中断。
您的另一个选择是创建一个适当的函子而不是 lambda。最终,lambda 并不能完成所有事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)