Switch back to constructor functions, because that drops some parentheses and allows me to make a constructor for a virtual object.
This handles the toughest part of converting those function pointers to something that calls proper C++ objects - defining the function object.