2014-02-16 128 views
1

我正在编写一个程序,它会自动在各种比特币交易所进行交易。由于每个交易所都有它的API,我犯了一个包装类为每个代表交流API:传递函数指针到非静态成员函数

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

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

我使用curl库与服务器通信,我需要通过卷曲一个函数指针,以我的回调函数是这样的:

​​

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

但由于BITSTAMP :: callbackFunction()是一个非静态成员(我不能使它静态),我不知道如何传递一个指针来卷曲:( 我的编译器建议使用& BITSTAMP :: callbackFunction,但显然不能在没有实例的情况下调用 - >段落

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

回答

3

功能你提供给CURLOPT_WRITEFUNCTION需要符合这个原型:

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

参数“用户数据”是什么,你CURLOPT_WRITEDATA指定,这样就可以使实例的“用户数据”的参数,其中情况下你的功能可以这样做:

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

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

+0

thx为你的输入,它的作用就像一个魅力:D但是,假设你会使用一个没有这种类型的userdata参数的API,所以你会被迫传递一个指向非静态的指针成员函数,你会怎么做?你永远不知道你会在你的生活中遇到什么,所以我会更好地学习它。 – Grisu47

相关问题