作者:
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帶進去??
謝謝!
別傳遞函式指標,C++傳std::function比較靈活
果然有人推 std::function xD 看來是不知道它的用法
作者:
CoNsTaR ((const *))
2020-09-29 22:14:00因為你的 function 不是 static?
你的test_api需要的參數是int (*)(void*, unsigned char*, unsigned int);你傳的是int (B::*)(void*, unsigned char*, unsigned int);
作者:
sighAll (sigh)
2020-09-29 23:02:00謝謝大家回應
作者:
sighAll (sigh)
2020-09-29 23:10:00按照我的理解再包一層是要在c code那邊的lib對吧
還是不懂為什麼這麼寫,函式指標來當callback就是跟成員函式搭不起來,如果是因為那個test_api是來自一個C語言專案就只好迂迴的偷渡物件指標了,該專案就必須提供填物件指標的介面
作者:
kingofsdtw (ä¸èƒ½é–’下來!!)
2020-09-30 00:41:00int *p = (*hello)(char * ){}c++避免寫這種爛code來炫技
那樣的話介面可能是寫成test_api(pfn_t cb,void* p)多給一個塞物件指標的參數
作者:
kingofsdtw (ä¸èƒ½é–’下來!!)
2020-09-30 00:44:00對大型專案毫無幫助
你 B 物件的個數和 test_api() 呼叫關係是怎麼樣?
作者: yvb 2020-09-30 12:33:00
作者:
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);