How do I call a pointer-to-member-function?

允我心安 提交于 2019-11-27 08:44:18

p->pfn is a pointer of pointer-to-member-function type. In order to call a function through such a pointer you need to use either operator ->* or operator .* and supply an object of type C as the left operand. You didn't.

I don't know which object of type C is supposed to be used here - only you know that - but in your example it could be *this. In that case the call might look as follows

(this->*p->pfn)(val)

In order to make it look a bit less convoluted, you can introduce an intermediate variable

PFN pfn = p->pfn;
(this->*pfn)(val);

Try

return (this->*p->pfn)(val);

Just to chime in with my own experience, I've come across an error in g++ caused by this statement:

  (this -> *stateHandler)() ;

Where stateHandler is a pointer to a void member function of the class referenced by *this. The problem was caused by the spaces between the arrow operator. The following snippet compiles fine:

(this->*stateHandler)() ;

I'm using g++ (GCC) 4.4.2 20090825 (prerelease). FWIW.

p->pfn is a function pointer. You need to use * to make it function. Change to

(*(p->pfn))(val)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!