我正在编写一个程序,它将自动在各种比特币交易所进行交易。由于每个交换都有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,但很明显它不能在没有实例的情况下调用 - >段错误
有谁知道怎么做?
答案 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 ++确实支持指向成员函数的指针,但成员函数指针在这里不会帮助你,因为你仍然需要一个实例才能取消引用它。)