【发布时间】:2016-12-06 01:53:04
【问题描述】:
在这个提升 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 函数不能直接从对 shared_from_this() 的调用中捕获 boost::shared_ptr 变量?不是一样的吗?我在任何地方都找不到解释。我读过其他例子(例如this 或this,但他们不会问这个问题)。
【问题讨论】:
-
尝试对命名捕获使用正确的语法:
[this, self=shared_from_this()]( ... ) -
这实际上编译成功,但对我来说仍然没有意义。在您的示例中,
self未声明(如示例auto self(shared_from_this())),那么 lambda 是如何知道其类型的? -
lambda 使用类型
auto进行命名捕获,与您在显式声明中使用的类型相同。命名类型使用auto,编译器从用于初始化它的表达式中找出类型。 -
好的,您可以将其添加为 aswer,以便我投票。
标签: c++