Что ж, самый простой способ - это использовать шаблон (который выведет тип для вас, не копаясь в указателе функции и компании):
template<class Funct>
double fun2(Funct my_funct){
my_funct( /*parameters of the function, or at least something that can be casted to the required types of the function parameters*/ );
}
В плохом слове, вы «передаете» указатель функции, которая может использоваться как функция, и, таким образом, используя operator()
, вы вызываете ее.
Это скомпилирует все, что определено operator()(/*parameters of my_funct*/)
, и объекты с этим оператором (например, check * 1008). *) или вызываемые функции и лямбды.