gpt4 book ai didi

c++ - 如何在自身内部使用 lambda 函数?

转载 作者:可可西里 更新时间:2023-11-01 15:20:27 24 4
gpt4 key购买 nike

我有这段代码,但不知道我想实现的目标是否可行。

_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 函数)。这可能吗?有没有更好的方法来实现这一目标?

最佳答案

您必须使用 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);

但是你只能通过引用来做;如果你试图按值(value)来捕捉它,那是行不通的。这意味着您必须将此类 lambda 的使用限制为使用引用捕获才有意义。因此,如果您在异步函数完成之前离开此作用域,它就会中断。

您的另一种选择是创建一个适当的仿函数而不是 lambda。最终,lambda 不能做所有事情。

关于c++ - 如何在自身内部使用 lambda 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10065666/

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