我使用cURL通过http下载文件。 cURL需要一个回调来处理数据,我在我的类中有一个回调,我使用std :: bind和std :: function的组合来创建一个适当类型的函数。std :: function.target返回null
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;
...
}
的问题是,功能为null。根据文档,当返回的类型与函数的目标类型不匹配时会发生这种情况,但据我所知,它们确实匹配。
如果这是如何试图将成员函数转换为静态函数,它不会工作。是否有一个原因,你没有'CURLOPT_WRITEDATA'将'this'传递给一个静态回调,在解压指针之后将该调用转发给非静态成员? [(见类似的问题)](http://stackoverflow.com/questions/21542723/c-segmentation-fault-caused-by-global-variable-in-separate-source-file/21542886#21542886)。 – WhozCraig
为什么不能这样工作? std :: function.target返回一个指向函数指针的指针。 – user467526