本文介紹了C++編程中成員函數(shù)指針的使用方法。成員函數(shù)的指針一般是這么用的,如下例:
class A
{
public:
char hello(int a){ return a-'0'; }
};
typedef char (A::*PTRFUN)(int);
int main(){
A* obj=new A();
PTRFUN pFun;
pFun = A::hello;
obj->(*pFun)(2);
return 0;
}
但你可能遇到這樣的情況,C++要將對(duì)象和函數(shù)指針傳遞給c,然后由c去調(diào)用,你可能會(huì)這么做:
void invokeFunc(void* obj,void* pfunc)
{
A* class_obj=(A*)obj;
PTRFUN pFun=(PTRFUN )pfunc;
class_obj->(*pFun)(2);
}
int main()
{
A* obj=new A();
PTRFUN pFun;
pFun = A::hello;
invokeFunc(obj,pFun);
}
但是你會(huì)發(fā)現(xiàn)編譯器會(huì)對(duì)PTRFUN pFun=(PTRFUN )pfunc;報(bào)錯(cuò),你可以這樣做:
void invokeFunc(void* obj,void* pfunc)
{
A* class_obj=(A*)obj;
PTRFUN* pFun2=(PTRFUN*)pfunc;
PTRFUN pFun=*pfunc;
class_obj->(*pFun)(2);
}
int main()
{
A* obj=new A();
PTRFUN pFun;
pFun = A::hello;
invokeFunc(obj,&pFun);
}
也就是將一級(jí)指針轉(zhuǎn)換為2級(jí)指針,這樣編譯就不會(huì)讀void*轉(zhuǎn)成員函數(shù)指針進(jìn)行報(bào)錯(cuò)。
新聞熱點(diǎn)
疑難解答
圖片精選