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

时间:2016-04-28 19:40:34

标签: 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
}

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

1 个答案:

答案 0 :(得分:3)

由于curl是C,你必须以C方式执行此操作。回调需要是静态的。要访问类变量,您应该将参数传递给回调(请参阅CURLOPT_WRITEDATA)。这也可以是"这个"对象或指向std :: string的指针我想..请参阅getinmemory.c示例。