This question already has answers here:
Recursive lambda functions in C++11
(14个回答)
2年前关闭。
有没有办法从其
我想对
但是没有单独的lambdas
而且我无法捕获对处理程序的引用,因为尚不知道其类型。
我现在看到的唯一解决方法是编写单独的函子类,仅因为有一个
(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/