Have you ever wanted to use a pointer to a class method? This might be basic C++ but I couldn’t remember how to do it, and spent some time Googling and messing around to figure it out. So here’s the way: To define a pointer to a class method: returnval (myclass::*method)(parameters…) For example: char *(myclass::*pmethod)(int parm); This defines a pointer named pmethod to a method of the myclass class. The method has a single int parameter and returns a char*. To assign a value to the pointer: pmethod = &myclass::method; For example: pmethod = &myclass::mymethod; This sets pmethod to point to mymethod. To call the class method: (myobject.*method)(parameters…) For example: mychar = (myobject.*pmethod)(myint); This calls the method pointed to by pmethod. The pointer can itself be in a struct or class as well. For example: struct { // processing table char *name; char *(myclass::*pmethod)(int parm); } proctbl[] = { { “text”, &myclass::mymethod}, { “text2”,&myclass::anothermethod} }; This defines a table of structures with two entries, each of which has a method pointer. The function can then be called as follows: mychar = (myobject.*proctbl[index].pmethod)(myint); In this example, the pointer proctbl[index].pmethod identifies the method to be called. Note that “::*” and “.*” are actually separate operators in C++. There is also a “->*” operator. You might never need this, but just in case you do… |
|