[英]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.