Я знаю, что при использовании простого интерфейса это не проблема, потому что после возврата curl_easy_perform передача завершена. Но как я узнаю об этом при использовании мультиинтерфейса? После просмотра документа. Это единственный способ, который я придумал до сих пор:
class CompleteListener {
public:
virtual void onComplete(CURLcode) = 0;
};
CURLMsg* msg = curl_multi_info_read(...);
void* ptr;
if(msg && msg->msg == CURLMSG_DONE)
{
curl_easy_getinfo(msg->easy_handle, CURLINFO_PRIVATE, &ptr);
static_cast<CompleteListener*>(ptr)->onComplete(msg->data.result);
}
Проблема с этим подходом состоит в том, что теперь все частные указатели должны указывать на экземпляр производного класса CompleteListener. Если есть способ сохранить указатель в CURLOPT_WRITEDATA, я также могу просто сохранить обратный вызов внутри CURLOPT_PRIVATE.