在Boost库asio示例中,处理程序赋值之前的[this,self]是什么意思?

时间:2014-01-15 15:13:25

标签: c++ boost c++11 boost-asio

在“[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服务器示例

2 个答案:

答案 0 :(得分:6)

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

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

以上是代码中lambda的简化语法。 A是上面提到的捕获列表(用于“捕获”当前作用域中的变量)。 B是参数列表(就像在函数中一样),C是正文(再次,就像一个函数)。

答案 1 :(得分:-1)

这个lambda捕获是为了确保会话对象超过异步操作:只要lambda处于活动状态。