Вложенный std :: bind в лямбде не может быть приведен к std :: function (из void *) - PullRequest
0 голосов
/ 15 ноября 2018

Я должен привести вызов метода-члена ( SystemUpdater :: OnSystemUpdateCompletedHandler ) к void *, чтобы получить доступ в качестве аргумента в статической функции Си.

Фрагмент 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...