C对C ++类实例成员的回调访问

时间:2014-08-15 00:56:23

标签: c++ libcurl

我有一个C ++函数,可以从libcurl api进行调用。签名如下:

size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata);
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEFUNCTION, write_callback); 

我的实施目前正是如此。

extern "C" {
size_t my_callback(char *contents, size_t size, size_t nmemb, void *userp)
{
    // ...
    data1 = getdata(); 
    data2 = getdata(); 

    return count;
}
}  

int MyClass::funcA() 
{
    // ...
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_callback); 
    // ...
}

如何进行此回调,以便回调中的dataN变量可以访问我的C ++类的这个实例?

更新:

使用建议的解决方案,我无法将这些函数中的变量复制为类变量。我现在看起来像这样...

class MyClass
{ 
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)
{
    // stops here
    content_.append(data, size * nmemb);
    return size * nmemb;
}

// within the main()
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &Filter::handle);

问题是我现在无法通过“content_.append”行。但是如果我改变要在此函数中本地声明的内容而不是作为类变量,它将继续。好像我没有看到类实例。

0 个答案:

没有答案