楼主:
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);