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
}
你会怎么做?如果你可以使用成员函数作为回调,那么解决方案会很简单,但你不能。
答案 0 :(得分:3)
由于curl是C,你必须以C方式执行此操作。回调需要是静态的。要访问类变量,您应该将参数传递给回调(请参阅CURLOPT_WRITEDATA)。这也可以是"这个"对象或指向std :: string的指针我想..请参阅getinmemory.c示例。