在“[this,self]”之前我从未见过这样的语法,我以前用C编程并用C ++做了一点,现在学习C ++ 11和Boost库,编译器很满意,但我可以弄清楚它是如何工作的以及它的作用。
void do_read()
{
auto self(shared_from_this());
socket_.async_read_some(boost::asio::buffer(data_, max_length),
[this, self](boost::system::error_code ec, std::size_t length)
---------^
{
if (!ec)
{
do_write(length);
}
});
}
它来自this link
中的Boost库Async Echo服务器示例答案 0 :(得分:6)
这是lambda的 capture-list 。它捕获变量this
(指针)和变量self
在上面声明一行。
[...](...){...}
// A B C
以上是代码中lambda的简化语法。 A
是上面提到的捕获列表(用于“捕获”当前作用域中的变量)。 B
是参数列表(就像在函数中一样),C
是正文(再次,就像一个函数)。
答案 1 :(得分:-1)
这个lambda捕获是为了确保会话对象超过异步操作:只要lambda处于活动状态。