devxlogo

Pointers to member functions

Pointers to member functions

Question:
I am having lots of trouble calling a class member function pointer that is declared within the same class. So far the following compiles:

class testClass {public:	void (testClass::*ptr)();	testClass();	// constructorprivate:	void testFunc();}testClass:testClass() {	ptr = &(testClass::testFunc);};

Now I cannot find a way of calling this function pointer from outside the object:

void main() {	testClass test;	test.*ptr();  // ERROR: does not compile}

I would be very grateful if you could give some assistance.

Answer:
Most pointer-to-member variables are not actually members of a class. For example, you might do something like this:

void (testClass::*ptr2)();ptr2 = &(testClass::testFunc);(test.*ptr2)();
This code declares a pointer-to-member variable called ptr2 that is not part of the class it references. However, this doesn’t work in your case because testFunc is a private member. The thing to realize is that, in the line:
(test.*ptr2)();
ptr2 is a separate variable. In your case, however, ptr is actually a class member. Therefore, you need additional work to specify the scope for ptr:
(test.*(test.ptr))();
Not a pretty sight. But, then again, pointer-to-member variables never have been.

devx-admin

Share the Post: