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

pass function-pointer to non-static member-function

本文关键字:函数 静态成员 指针      更新时间:2023-10-16

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

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

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

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

curl_easy_setopt(CURLOPT_WRITEFUNCTION, functionPointer);
(函数指针

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

但是由于 BITSTAMP::callbackFunction() 是一个非静态成员(我不能让它成为静态成员),我不知道如何将指针传递给 curl :(我的编译器建议使用 &BITSTAMP::callbackFunction,但显然如果没有实例 ->段错误就无法调用它

有谁知道如何做到这一点?

您提供给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++确实支持指向成员函数的指针,但成员函数指针在这里对您没有帮助,因为您仍然需要一个实例来取消引用它)。