簡體   English   中英

將函數指針傳遞給非靜態成員函數

[英]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);

(functionPointer是一個隱式轉換為指針的普通靜態函數)

但由於BITSTAMP :: callbackFunction()是一個非靜態成員(我不能使它靜態),我不知道如何將指針傳遞給curl :(我的編譯器建議使用&BITSTAMP :: callbackFunction但顯然它沒有實例也不能調用 - > segfault

有誰知道如何做到這一點?

您提供給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 ++支持指向成員函數的指針是正確的,但是成員函數指針在這里不會幫助你,因為你仍然需要一個實例才能取消引用它)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM