在lambda函数的捕获列表中调用函数

时间:2016-12-06 01:53:05

标签: c++

在这个提升asio example中,我看到了:

auto self(shared_from_this()); //boost::shared_ptr<connection>

boost::asio::async_write(socket_, reply_.to_buffers(),
    [this, self](boost::system::error_code ec, std::size_t)
    {
        //...
    }
);

在Visual Studio 2015中,如果我写

[this, shared_from_this()](boost::system::error_code ec, std::size_t)

我收到以下错误:

  

错误C2059语法错误:')'

为什么lambda函数不能直接从调用boost::shared_ptr中捕获shared_from_this()变量?这不是一回事吗?我找不到任何解释。我已阅读其他示例(例如thisthis,但他们不会问这个问题。)

1 个答案:

答案 0 :(得分:2)

在您的情况下,命名捕获的正确语法是:

[this, self=shared_from_this()]( ... )