我如何在自身内部使用lambda函数?

flu*_*mpb 11 c++ lambda c++11

我有这个代码,不知道我想要实现的是什么.

_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);
    }
);
Run Code Online (Sandbox Code Playgroud)

一旦接受了套接字,我想重用处理程序(也就是lambda函数).这可能吗?有没有更好的方法来实现这一目标?

Nic*_*las 9

您必须使用std::function<>(或类似的东西)作为中介来存储lambda的副本:

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);
Run Code Online (Sandbox Code Playgroud)

但你只能通过参考来做; 如果你试图按值捕获它,它将无法工作.这意味着你必须将这种lambda的使用限制为使用被引用捕获才有意义.因此,如果您在异步函数完成之前离开此范围,它将会中断.

另一种选择是创建一个合适的函子而不是lambda.最终,lambdas不能做任何事情.