Взгляните на библиотеку признаков boost , в частности шаблон function_traits
предоставляет такую функциональность из коробки. Если вы не можете использовать boost, просто загрузите код и прочитайте источники, чтобы понять, как это делается.
Обратите внимание, что функциональность основана на типах, а не на конкретных функциях, поэтому вам может потребоваться добавить туда дополнительный код.
После выполнения небольших тестов, это может быть не то, что вам действительно нужно, и если это «некоторый дополнительный код», будет нетривиальным. Проблема в том, что шаблон function_traits
работает с сигнатурами функций, а не с фактическими указателями функций, поэтому проблема изменилась с «получить тип возвращаемого значения из указателя функции» на «получить сигнатуру из указателя функции», что, вероятно, является самым сложным часть там.