typedef'ing function * signature * (no es un puntero a), para que pueda reutilizarse?

EDIT: MOTIVACIÓN

Supongo que defino una clase de controlador como

class Handler {
public:
  class Message { /*...*/ };
  typedef int (*Callback)(Message *msg);
  void registerCallback(int msgclass, Callback f);
};

Un cliente puede hacer

int f1(Handler::Message *msg)
{ /* handle message */ }

int f2(Handler::Message *msg)
{ /* handle message */ }

int main(){
  Handler h;
  h.registerCallback(1, f1);
  h.registerCallback(2, f2);
  // ....
}

El compilador de hecho verificará quef1 yf2 son apropiados como parámetros pararegisterCallback, sin embargo, depende del cliente definirf1 yf2 correctamente. Como ya hetypedefedCallback, Me gustaría que el cliente pueda usarlo en su lugar.

END EDIT

Me gustaría hacer algo como esto:

typedef int arithmetic(int i, int j);

arithmetic sum
{
 return i+j;
}

arithmetic max
{
  return (i>j)? i:j;
}
// etc.

Sin embargo, ambos

arithmetic sum
arithmetic sum()

no compile, y también este

arithmetic sum(int i, int j)

which da error de compilación de

func.cpp: 4: error: "suma" declarada como función que devuelve una función

La razón por la que quiero esto es porque quiero tener unaHandler clase que proporcionaría unatypedef para una función de devolución de llamada que acepta, incluyendo la lista de parámetros.

Respuestas a la pregunta(5)

Su respuesta a la pregunta