However the rest of your concerns in large remain valid. As part of the design pattern all the possible functions _should_ take all the same arguemnts.
FYI: i emphasize should because it's language dependent wether it should or shouldn't but in C/C++ they have to take the same arguments.
All you do is create an array of function pointers and populate the array with pointers to functions you will want to call. You can then pass then call them by offset
You can see a running example i wrote up in 5 seconds here: http://codepad.org/r6x6VD4o
"If art interprets our dreams, the computer executes them in the guise of programs!" - SICP
“If at first, the idea is not absurd, then there is no hope for it” - Albert Einstein