c++ - libcurl,如何为每个句柄附加不同的回调函数?

标签 c++ libcurl

libcurl 允许您为每个文件传输创建一个“句柄”。它允许您指定文件的 URL 和一个回调函数,该回调函数将接收从 URL 检索到的文件的点点滴滴。如果你想为每个句柄设置不同的回调怎么办?你会怎么做呢?请记住,回调必须是非成员函数(或静态成员函数)。

一种方法是为每个句柄手动输入不同的回调,例如:

size_t callback1(void* buffer, size_t size, size_t nmem, void* userp);
size_t callback2(void* buffer, size_t size, size_t nmem, void* userp);
size_t callback3(void* buffer, size_t size, size_t nmem, void* userp);
// ...etc

这有效,除非您动态地 创建句柄。考虑这样一个函数:

void f(){
  CURLHandle handle = curl_easy_init();
  // set the url to some random url
  // set a *unique* call back for this handle
}

你会怎么做?如果您可以使用成员函数作为回调,解决方案会很简单,但您不能。

最佳答案

因为 curl 是 C 语言,所以你必须以 C 语言的方式来做这件事。回调需要是静态的。要访问您的类变量,您应该将参数传递给回调(参见 CURLOPT_WRITEDATA )。这也可以是一个“this”对象或一个指向 std::string 的指针,我想......参见 getinmemory.c示例。

关于c++ - libcurl,如何为每个句柄附加不同的回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36924031/

相关文章:

c++ - 创建 Visual C++ 中缺少的 GUID 菜单项

c++ - 为什么我可以在运算符 += 的右侧使用初始化列表而不是运算符 +?

c++ - 15 位颜色分量,位移位

c++ - CURLOPT_COOKIELIST 可以设置在不同的 curl easy handle 上吗?

c++ - Rust 与 C++ std::string 互操作

c++ - 如何在 C++ 中模板化接受模板化参数并在其上应用模板化函数的函数?

c++ - 如何设置二进制依赖的DLL名称?

c - libcurl 中的 Json 字符串

c++ - 取消libcurl easy handle

c++ - 在 C++ 中使用 libcurl 下载多个文件