This question already has answers here:
Recursive lambda functions in C++11

(14个回答)


2年前关闭。




有没有办法从其operator()内部引用该关闭对象?
我想对Boost.Asio做的简化版本:
tcp::acceptor acceptor;

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

acceptor.async_accept( handler );

但是没有单独的lambdas this
而且我无法捕获对处理程序的引用,因为尚不知道其类型。
我现在看到的唯一解决方法是编写单独的函子类,仅因为有一个this -pointer。

最佳答案

没错,您不能在C++ 11、14和17中编写递归lambda,也不能收集相互递归lambda的集合。

已经提出了一些将来的扩展来实现此目的,但是到目前为止还没有决定。当前的变通办法包括创建一个擦除类型的std::function包装器,或者确实如您所指出的那样,以编写您自己的函子类。

(当您遇到“can lambdas do X”这类问题时,后者通常是一个选择-lambdas只是围绕现有语言功能的语法糖,当您需要它们时,这些功能将始终存在。)

关于c++ - lambda体内有这个吗? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52020737/

10-11 22:46
查看更多