在Boost库asio示例中,处理程序分配之前的[this,self]意味着什么



我以前从未见过这样的语法"[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);
}
});
}

它来自这个链接中的Boost库Async Echo服务器示例

这是lambda的捕获列表。它正在捕获上面一行声明的变量this(指针)和变量self

[...](...){...}
//    A    B    C

上面是代码中lambda的简化语法。A是上面提到的捕获列表(用于从当前范围"捕获"变量)。B是参数列表(就像在函数中一样),C是主体(同样像函数)。

这个lambda捕获是为了确保会话对象的寿命超过异步操作:只要lambda是活动的。

最新更新