2014-02-16 168 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

相關問題