FuncPtrs/Templates (I'm way over my head!)

you can define function ptrs to functions with a specified set of arguments. it's common to specify a void* argument which can then be cast to the type needed by the function

see variadic functions for functions with a variable # of arguments.