我使用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