在这个提升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()
变量?这不是一回事吗?我找不到任何解释。我已阅读其他示例(例如this或this,但他们不会问这个问题。)
答案 0 :(得分:2)
在您的情况下,命名捕获的正确语法是:
[this, self=shared_from_this()]( ... )