[問題] cpp的function pointer傳遞

作者: sighAll (sigh)   2020-09-29 19:17:24
大家好
我有一個header, test.h, 有一個function pointer
typedef int(*pfnTest_t)(void* x, unsigned char* y, unsigned
int z);
一個API:
int test_api(pfnTest_t p_pfnTest);
然後有一個cpp
class B {
...
test();
...
}
B::B_API(void* x, unsigned char* y, unsigned int z){
...
}
B::test()
{
test_api(&B::B_API); // error!
}
compiler的時候 有error
請問這cpp裡面如何把function pointer帶進去??
謝謝!
作者: james732 (好人超)   2020-09-29 20:46:00
普通的function跟class裡的function是不同的東西https://tinyurl.com/y37kytue 參考這篇的範例
作者: eye5002003 (下一夜)   2020-09-29 21:16:00
別傳遞函式指標,C++傳std::function比較靈活
作者: loveme00835 (髮箍)   2020-09-29 21:20:00
果然有人推 std::function xD 看來是不知道它的用法
作者: CoNsTaR ((const *))   2020-09-29 22:14:00
因為你的 function 不是 static?
作者: Jockey66666 (往事已成追憶)   2020-09-29 22:21:00
你的test_api需要的參數是int (*)(void*, unsigned char*, unsigned int);你傳的是int (B::*)(void*, unsigned char*, unsigned int);
作者: sighAll (sigh)   2020-09-29 23:02:00
謝謝大家回應
作者: james732 (好人超)   2020-09-29 23:09:00
不然就再包一層了?
作者: sighAll (sigh)   2020-09-29 23:10:00
按照我的理解再包一層是要在c code那邊的lib對吧
作者: eye5002003 (下一夜)   2020-09-30 00:35:00
還是不懂為什麼這麼寫,函式指標來當callback就是跟成員函式搭不起來,如果是因為那個test_api是來自一個C語言專案就只好迂迴的偷渡物件指標了,該專案就必須提供填物件指標的介面
作者: kingofsdtw (不能閒下來!!)   2020-09-30 00:41:00
int *p = (*hello)(char * ){}c++避免寫這種爛code來炫技
作者: eye5002003 (下一夜)   2020-09-30 00:42:00
那樣的話介面可能是寫成test_api(pfn_t cb,void* p)多給一個塞物件指標的參數
作者: kingofsdtw (不能閒下來!!)   2020-09-30 00:44:00
對大型專案毫無幫助
作者: loveme00835 (髮箍)   2020-09-30 10:04:00
你 B 物件的個數和 test_api() 呼叫關係是怎麼樣?
作者: yvb   2020-09-30 12:33:00
考古一下: #1AdlQLYS (C_and_CPP)
作者: CoNsTaR ((const *))   2020-09-30 21:26:00
你需要的是 partial application,這種好東西 cpp 也是不會有的,不用擔心 XD不過你可以把 pfnTest_t type 改成 int(*pfnTest_t)(B *thiz, void* x, unsigned char* y, unsignedint z);

Links booklink

Contact Us: admin [ a t ] ucptt.com