curl WRITEFUNCTION and classes
handle must be a static member function. You can pass a pointer to the instance of Filter as last argument by using CURLOPT_WRITEDATA
class Filter{ private: std::string content_; static size_t handle(char * data, size_t size, size_t nmemb, void * p); size_t handle_impl(char * data, size_t size, size_t nmemb);};size_t Filter::handle(char * data, size_t size, size_t nmemb, void * p){ return static_cast<Filter*>(p)->handle_impl(data, size, nmemb);}size_t Filter::handle_impl(char* data, size_t size, size_t nmemb){ content_.append(data, size * nmemb); return size * nmemb;}int main(){ // curl initialization... should be done in a constructor Filter f; curl_easy_setopt(curl, CURLOPT_WRITEDATA, &f); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &Filter::handle); // curl cleanup... should be done in a destructor return 0;}
string temp;curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,handle);curl_easy_setopt(curl,CURLOPT_WRITEDATA,&temp);size_t Filter::handle(void *ptr, size_t size, size_t nmemb, string stream){ string temp(static_cast<const char*>(ptr), size * nmemb); stream = temp; return size*nmemb;}
thats how i got it to work.. this will save the website to the string named temp.