Consider the following typedefs :
typedef int (*f1)(float); typedef f1 (*f2)(double); typedef f2 (*f3)(int);
f2 is a function
f2
Use std::function:
std::function
typedef std::function f1; typedef std::function f2; typedef std::function f3;
or
typedef std::function(double)>(int)> f3;