无法将Lambda中的嵌套std :: bind强制转换为std :: function(来自void *)

时间:2018-11-15 13:21:22

标签: c++ lambda std-function stdbind

我必须将成员方法调用( SystemUpdater :: OnSystemUpdateCompletedHandler )强制转换为void *,以便在静态C函数中作为参数进行访问。

代码段1:

updateDownloader->StartDownloadAsync(_updateRequest.url, "update-test", [&](std::string resultFile, Network::FileDownloaderResult_t result) {
                                this->updateHelper->StartUpdate(resultFile, std::bind(&SystemUpdater::OnSystemUpdateCompletedHandler, this, std::placeholders::_1));

代码段2:

updateDownloader->StartDownloadAsync(_updateRequest.url, "update-test", [&](std::string resultFile, Network::FileDownloaderResult_t result) {
                            this->updateHelper->StartUpdate(resultFile, [&](int result){OnSystemUpdateCompletedHandler(result); });

StartUpdate的第二个参数在我的静态C函数中强制转换并执行:

    (*((std::function<void(int)>*) userdata))(_result);

此强制转换和执行适用于代码段2,但不适用于代码段1(信号:SIGSEGV(分段错误))。

为什么?

StartUpdate声明为:

UpdateResult_t StartUpdate(const std::string &path,const std::function<void(int)> &finishCallback)

0 个答案:

没有答案