c++ - 在 Boost 库 asio 示例中,处理程序分配之前的 [this, self] 是什么意思?

标签 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 服务器示例

最佳答案

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

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

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

关于c++ - 在 Boost 库 asio 示例中,处理程序分配之前的 [this, self] 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21141116/

相关文章:

c++ - 如何获取给定文件夹中具有特定扩展名的文件列表?

c++ - 将 C++ 应用程序从 Directx9 移植到 Directx10 之前的重要阅读

c++ - 是否有用于 C++ 项目的类似 ReSharper 的工具?

c++ - 使用 boost::mpl 获取 vector 的大小

c++ - 我的 std::hash for std::tuples...有什么改进吗?

c++ - 递归模板解释C++

c++ - 在 boost::spirit 中使用 + 运算符:char cast 错误?

c++ - 如何划分boost::optional<double>?

获取完整函数路径和声明的 C++ 宏

C++11 声明工厂是基类的友元