将函数指针传递给非静态成员函数

时间:2014-02-16 18:48:00

标签: c++ pointers curl

我正在编写一个程序,它将自动在各种比特币交易所进行交易。由于每个交换都有API,我为每个代表交换的API创建了一个包装类:

class BITSTAMP : public EXCHANGE {
    public:
       int callbackFunction(int parameter)
       {
       //code
       }
}

回调函数应该处理服务器作为回复发送的JSON字符串。

我正在使用curl库与服务器进行通信,我需要将curl函数指针传递给我的回调函数,如下所示:

curl_easy_setopt(CURLOPT_WRITEFUNCTION, functionPointer);

(functionPointer是一个隐式转换为指针的普通静态函数)

但是因为BITSTAMP :: callbackFunction()是一个非静态成员(我不能使它静态),我不知道如何将指针传递给curl :( 我的编译器建议使用& BITSTAMP :: callbackFunction,但很明显它不能在没有实例的情况下调用 - >段错误

有谁知道怎么做?

1 个答案:

答案 0 :(得分:3)

您提供给CURLOPT_WRITEFUNCTION的函数需要匹配此原型:

size_t function(char *ptr, size_t size, size_t nmemb, void *userdata);

参数“userdata”是您使用CURLOPT_WRITEDATA指定的任何内容,因此您可以将实例设为“userdata”参数,在这种情况下,您的函数正文可以执行:

 BITSTAMP* instance = static_cast<BITSTAMP*>(userdata);
 int parameter = // ...
 instance->callbackFunction(parameter);

..以便调用成员函数。 (虽然C ++确实支持指向成员函数的指针,但成员函数指针在这里不会帮助你,因为你仍然需要一个实例才能取消引用它。)