Как использовать функцию-член на основе класса в качестве функции обратного вызова в Curl_easy_setopt() в cpp ⇐ C++
-
Anonymous
Как использовать функцию-член на основе класса в качестве функции обратного вызова в Curl_easy_setopt() в cpp
Я пишу программу, в которой определил функцию обработчика событий как функцию-член класса в файле one.cpp. Мой собственный HTTP-клиент определен в другом файле Second.cpp.
Изначально я написал логику Curl внутри one.cpp
curl_easy_setopt( m_curl, CURLOPT_WRITEFUNCTION, EventHandler); Curl_easy_setopt(m_curl, CURLOPT_WRITEDATA, (void*) &eventHandlerInfo); Здесь EventHandler — это функция для обработки события. EventHandlerInfo — это структура
size_t EventHandler( void* ptr, размер size_t, size_t нмемб, EventHandlerInfo* eventHandlerInfo ) Этот код работал, но позже мы решили преобразовать one.cpp из стиля C в стиль на основе классов. impl вместе с интеграцией Curl из Second.cpp. (используя Second.h внутри one.cpp)
Наконец, теперь у нас есть файл one.cpp с функцией-членом EventHandler и файл secrond.cpp с функцией Get. Обертка запроса с логикой завитка. Нужно вызвать эту обертку в one.cpp
Я попробовал 3 способа, но ни один из них не сработал.
[*]Передать указатель функции в качестве аргумента оболочке GET в one.cpp [*]Отдельный обработчик событий из one.cpp позволяет создать функтор на основе класса, перегруженный оператором (). Использовал это непосредственно в Second.cpp. Я не получил никакой ошибки, но обратный вызов не работает. [*]Создал обобщенную лямбду в файле Second.cpp и напрямую передал ее в Curl_easy_setopt. Обратный звонок не сработал
Может кто-нибудь подсказать какой-нибудь способ? Было бы полезно.
Я пишу программу, в которой определил функцию обработчика событий как функцию-член класса в файле one.cpp. Мой собственный HTTP-клиент определен в другом файле Second.cpp.
Изначально я написал логику Curl внутри one.cpp
curl_easy_setopt( m_curl, CURLOPT_WRITEFUNCTION, EventHandler); Curl_easy_setopt(m_curl, CURLOPT_WRITEDATA, (void*) &eventHandlerInfo); Здесь EventHandler — это функция для обработки события. EventHandlerInfo — это структура
size_t EventHandler( void* ptr, размер size_t, size_t нмемб, EventHandlerInfo* eventHandlerInfo ) Этот код работал, но позже мы решили преобразовать one.cpp из стиля C в стиль на основе классов. impl вместе с интеграцией Curl из Second.cpp. (используя Second.h внутри one.cpp)
Наконец, теперь у нас есть файл one.cpp с функцией-членом EventHandler и файл secrond.cpp с функцией Get. Обертка запроса с логикой завитка. Нужно вызвать эту обертку в one.cpp
Я попробовал 3 способа, но ни один из них не сработал.
[*]Передать указатель функции в качестве аргумента оболочке GET в one.cpp [*]Отдельный обработчик событий из one.cpp позволяет создать функтор на основе класса, перегруженный оператором (). Использовал это непосредственно в Second.cpp. Я не получил никакой ошибки, но обратный вызов не работает. [*]Создал обобщенную лямбду в файле Second.cpp и напрямую передал ее в Curl_easy_setopt. Обратный звонок не сработал
Может кто-нибудь подсказать какой-нибудь способ? Было бы полезно.
Мобильная версия