我有调用下载管理器功能的主要功能。在该函数内部,我希望能够使用pathUrl
函数中的onFileTaskSuccess
。我怎么能把它传递进来?
std::string MyClass::DownloadFromUrl()
{
std::string pathUrl ="";
//Then i have downloader which looks like this:
this->m_downloader->onFileTaskSuccess = [this](const network::DownloadTask& task)
{
//i want to use pathUrl here .. how can i pass it to here ?
pathUrl = someValueFromTheApp;
}
return pathUrl;
}
修改
我的主要目标是从修复问题的主要功能返回值
这是在内部lambda函数中计算的。
我也尝试过:
这是参考:
this->m_downloader->onFileTaskSuccess = [this,&pathUrl,&someValueFromTheApp](const network::DownloadTask& task)
{
//i want to use pathUrl here .. how can i pass it to here ?
pathUrl = someValueFromTheApp;
}
但我得到了这个错误:
error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const std::string' (or there is no acceptable conversion)
答案 0 :(得分:4)
Capture pathUrl
:
this->m_downloader->onFileTaskSuccess = [this, pathUrl](const network::DownloadTask& task)
{
// `pathUrl` can now be used.
}
通常,您可以选择按值(即制作副本)或通过引用进行捕获。如果您通过引用捕获,则假设捕获的对象至少与lambda 一样长。
在您的特定情况下,似乎onFileTaskSuccess
是异步函数,将在DownloadFromUrl
范围结束后调用 - 因此pathUrl
应该用价值来捕捉。
在C ++ 14中,您可以使用通用lambda捕获来避免不必要的副本:
this->m_downloader->onFileTaskSuccess = [this, pathUrl = std::move(pathUrl)]
(const network::DownloadTask& task)
{
// `pathUrl` can now be used.
}
(上面的代码假定在将pathUrl
分配给lambda后将不会使用onFileTaskSuccess
。)