将函数指针传递给非静态成员函数
pass function-pointer to non-static member-function
我正在编写一个程序,该程序将自动在各种比特币交易所进行交易。由于每个交易所都有它在 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++确实支持指向成员函数的指针,但成员函数指针在这里对您没有帮助,因为您仍然需要一个实例来取消引用它)。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 如何在C++中使用非静态成员函数作为回调函数
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 静态成员函数使用相同的名称时出现模板类型名称错误
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 如何在友元函数中使用静态成员而不添加前缀 [类名]::
- C++构造函数和静态成员
- 为什么传递非静态成员函数会导致编译错误?
- 非静态成员失败的线程调用函数
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 非静态成员函数的 decltype 格式不正确吗?
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- std::异步与非静态成员函数
- C++无效使用非静态成员函数?
- 指向重载静态成员的函数指针 - 在unique_ptr中用作自定义删除器
- 未使用的C++未优化的静态成员函数/变量
- C++:如何返回指向非静态成员函数的指针?
- 有没有一种方法可以使全局函数/静态成员函数一次可呼出
- 函数静态成员变量
- 隐藏模板化的辅助函数——静态成员或未命名的命名空间