[问题] 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