-1
我有一個特殊的回調(這是在一些'C'土地定義)需要填充一些額外的工作,不屬於回調函數的一部分。它是這樣的......std ::綁定一個常規函數,但結尾
typedef void (*callback_func)(int);
extern int set_callback(callback_func cb);
在我的C++代碼,我需要SET_VALUE是回調的範圍之外定義,在我的課的承諾。所以,我必須捕獲std :: promise成員變量或這個併發送到回調函數,然後在調用回調函數後設置它,只是編譯器不喜歡它。我這樣做,這樣一來,
set_callback([this](int x) {
// some code ...
prom.set_value(true);
});
下面是剪斷錯誤:
error: no matching function for call to 'set_callback'
set_callback([this](int var) {
^~~~~~~~~~~~~~~~~~~~~~~~~
note: candidate function not viable: no known conversion from '(lambda at xxx ' to 'callback_func'
(aka 'void (*)(int)') for 1st argument
我意識到,我需要以某種方式「綁定」的定時功能,使回調函數的std ::功能,但我不確定如何實現這一點 - 更不用說將它發送給參數並執行結尾語。請建議,謝謝!
不幸的是,C代碼無法更改!爲了迴應你提出的建議,你建議把這個指針作爲一個void *傳遞給它(並且將它作爲第一個參數傳遞進來會更加一致 - 實質上,這就是這個指針是),但我相信有一個更好的方法將C函數綁定到std :: function,然後跟隨結尾,但我不知道如何。 – chimp45
@ chimp45正如我所說的,將C函數綁定到'std :: function'是**不可能**。 – Justin
@ chimp45函數指針包含調用約定,「C」或「C++」和說明符的定義。指向C++函數的指針與C不兼容,而不使用extern「C」。這也是它們不能被綁定爲C指針的原因。其次,除非類是一個微不足道的和POD,否則不能將「this」傳遞給C。您需要在C++代碼中創建n外部「C」函數,以便在其中進行適當的工作 – Swift