The reason they all need to be the same type is how would you know how to call it?
A vec of an enumeration of function pointers would work, that would both let you determine 'how' to call it, makes it fully type safe, and you can encode any type in to it that you put in your enumeration.