#include <iostream>
using namespace std;
int maxi(int left, int right)
{
return left >= right ? left : right;
}
typedef int (*pmaxi)(int, int);
int ret_max(int, int, int(int, int));
int ret_max(int, int, int(*)(int, int));
int ret_max(int left, int right, int(*fun)(int, int))
{
return fun(left, right);
}
int (*ret_max_2(void))(int, int)
{
return maxi;
}
int main()
{
int a = 10;
int b = 20;
pmaxi maxfun = NULL;
maxfun = maxi;
maxfun = &maxi;
cout << maxfun(a, b) << endl; // 隐式调用
cout << (*maxfun)(a, b) << endl; // 显式调用
cout << ret_max(a, b, maxi) << endl;
// cout << ret_max_2(a, b) << endl; // error
// cout << (*ret_max_2)(a, b) << endl; // error
pmaxi maxfun2 = ret_max_2();
cout << maxfun2(a, b) << endl;
return 0;
}