Думайте об этом как:
return_type (*ptr_name)(arguments);
Часто проще всего использовать typedef, чтобы держать его как можно ближе к этому.Например:
void *(*f)(int);
можно переписать как:
typedef void *ret_type;
ret_type (*f)(int);
, это становится особенно актуально, когда / если все становится сложным - например, в любое время, когда вы выполняете какое-то псевдо-функциональное программированиес одной функцией, возвращающей указатель на другую функцию, вы почти наверняка захотите использовать typedef, чтобы сохранить две прямые.
Редактировать: Вы также должны знать, что вы, кажется, пытаетесь заново изобрести Командушаблон.Возможно, вы захотите взглянуть (для одного примера) на реализацию шаблона команды в Modern C ++ Design .