When I need a pointer to member of class, I do as following
struct MyStruct
{
int foo();
};
int (MyStruct::*p)() = &MyStruct::foo;
My question is why do I need to use & operator to take the address which may be ignored if it were a static function. Also, I’ve heard pointer to members aren’t really a pointer, Can someone clarify that?
If it’s a static function, it works just as a regular non-member function pointer: the function name itself can be implicitly converted to a function pointer.
If it’s a non-static member function, it’s no longer the same thing as a non-member function:
thisparameter;thispointer may need to be adjusted before the call. This already makes it impossible to use a pointer to store a pointer-to-member-function.Raymond Chen wrote an interesting article about this with more details and examples.