是否可以从其<div class="statement">
<div class="header-navbar">The Header</div>
<div class="header-username hide-username">Header username</div>
<div class="statement-list">
<ul>
<li>ABCD</li>
<li>EFGH</li>
<li>IJKL</li>
<li>MNOP</li>
</ul>
</div>
<div class="content">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut vehicula mi non risus dignissim pulvinar. Integer sed lacus vitae enim sagittis egestas. In hac habitasse platea dictumst. Sed quis nunc eget nibh facilisis condimentum. Proin imperdiet faucibus
leo, ut ullamcorper dui sollicitudin id. Sed gravida felis id turpis auctor, sit amet suscipit diam euismod. Curabitur egestas ex ligula, in tincidunt ex sollicitudin eget. Sed sodales tincidunt fermentum. Vivamus at leo eu mauris congue suscipit
in in felis. Praesent a consequat nisl.</p>
</div>
</div>
内部引用关闭对象?
我想对operator()
做的事情的简化版本:
Boost.Asio
但是lambda并没有单独的tcp::acceptor acceptor;
auto handler = [&acceptor]( )
{
// ...
acceptor.async_accept( *this );
};
acceptor.async_accept( handler );
。
而且我无法捕获对处理程序的引用,因为尚不知道其类型。
我现在看到的唯一解决方法是编写单独的函子类,仅仅是因为有一个this
指针。
答案 0 :(得分:2)
是的,您不能在C ++ 11、14和17中编写递归lambda,也不能收集相互递归lambda的集合。
已经提出了一些将来的扩展名,可以实现此目的,但目前尚无定论。当前的变通办法包括创建一个擦除类型的std::function
包装器,或者实际上正如您所指出的那样,只是编写自己的函子类。
(当您遇到“可以做X的lambda的问题”时,后者通常是一个选择-lambda只是围绕现有语言功能的语法糖,当您需要它们时,这些功能将始终存在。)