Обратите внимание, что у вас могут быть ссылки на функции
int runner(int x,int y, int (&functocall)(int, int)){
return functocall(x,y);
}
Теперь вызов его с помощью &add
больше не будет работать, потому что вы пытаетесь связать ссылку на функцию с указателем, а не с функцией.Иногда это просвечивает при использовании шаблонов
template<typename T>
int runner(int x,int y, T &functocall, T otherfunc){
return functocall(x,y) + otherfunc(y, x);
}
Теперь вызывать его с помощью runner(10, 20, add, add)
не удастся, потому что T
пытаются определить как по указателю функции, так и по типу функции (нет затухания в указателесделано при передаче в опорный параметр!).