λ体内有这个吗?

Is there this in lambda body?

本文关键字:      更新时间:2023-10-16

有没有办法从其operator()内部引用闭包对象?
我想用Boost.Asio做什么的简化版本:

tcp::acceptor acceptor;
auto handler = [&acceptor]( )
{
// ...
acceptor.async_accept( *this );
};
acceptor.async_accept( handler );

但是 lambda 没有单独的this
而且我无法捕获对处理程序的引用,因为它的类型尚不清楚。 我现在看到的唯一解决方法是编写单独的函子类,仅仅是因为有一个this指针。

你是对的,你不能在 C++11、14 和 17 中编写递归 lambda,也不能写互递 lambda 的集合。

已经提出了几个未来的延期,以实现这一点,但目前还没有决定。当前的解决方法包括创建一个类型擦除std::function包装器,或者正如您所指出的,只编写自己的函子类。

(当你有"lambdas do X"这样的问题时,后者通常总是一个选项——lambdas只是围绕现有语言特性的语法糖,当你需要它们时,这些功能将始终存在。

相关文章:
  • 没有找到相关文章