Развернуть как ROOT во встроенном коте

Лямбда, которая захватывает переменные контекста, не может быть преобразована в указатель на голой функции, поскольку это может привести к невозможности переноса захваченного состояния. То, что вы показали в примере, - это правильный способ решить проблему вызова функций-членов C ++ с помощью обратного вызова C.

Вы можете заменить c_callback_wrapper на захват меньше лямбда, если вы обнаружите, что более привлекательным.

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, 
                 [](char *ptr, size_t size, size_t nmemb, void *userdata) {
                    // invoke the member function via userdata
                    auto p = static_cast<MyClass *>(userdata);
                    return p->actualCallback(ptr, size, nmemb, userdata);
                 });

Обратите внимание, что вам, вероятно, следует избавиться от последнего параметра actualCallback(), так как это только указатель this, который не нужно передавать нестатической функции-члена явно.

0
задан Duck Dodgers 30 December 2018 в 09:19
поделиться