Я должен привести вызов метода-члена ( 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)