【发布时间】:2014-08-14 00:29:44
【问题描述】:
我正在使用 cURL 通过 http 下载文件。 cURL 需要回调来处理数据,我的类中有一个回调,我正在使用 std::bind 和 std::function 的组合来创建具有正确类型的函数。
size_t NetworkResource::writeFunction(char *ptr,size_t size,size_t nmemb,void *userdata)
{
...
}
void NetworkResource::loadFunction(void)
{
using namespace std::placeholders;
typedef size_t CurlCallback(char*,size_t,size_t,void*);
auto function=std::function<CurlCallback>(std::bind(&NetworkResource::writeFunction,this,_1,_2,_3,_4)).target<CurlCallback*>();
CURL *curl=curl_easy_init();
CURLcode err;
...
err=curl_easy_setopt(curl,CURLOPT_WRITEDATA,nullptr);
if(err!=CURLE_OK) std::cout<<curl_easy_strerror(err)<<std::endl;
err=curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,*function);
if(err!=CURLE_OK) std::cout<<curl_easy_strerror(err)<<std::endl;
...
}
问题是函数为空。根据文档,当返回的类型与函数的目标类型不匹配时会发生这种情况,但据我所知它们确实匹配。
【问题讨论】:
-
如果这是您尝试将成员函数转换为静态函数的方式,它是行不通的。您是否有理由不
CURLOPT_WRITEDATA将this传递给静态回调,该回调在解压缩指针后将调用转发给非静态成员? (see similar question). -
为什么这不起作用? std::function.target 返回一个指向函数指针的指针。