#include <iostream>
#include<vector>
#include<functional>
#include<string>
#include<algorithm>
#include<map>
using namespace std;
int add(const int& a, const int& b)
{
return a + b;
}
int sub(const int& a, const int& b)
{
return a - b;
}
struct Mulitiply {
int operator()(const int& a, const int& b)
{
return a - b;
}
};
int my_process(const int& a, const int& b, decltype(add) f)
{
return f(a, b);
}
int main()
{
cout << my_process(2, 1, sub)<<endl;
auto ad = add;
auto mod = [](const int& a, const int& b) {return a % b; };
int (*cc)(const int& a, const int& b) = sub;
cout << my_process(3, 3, ad)<<endl;
cout << my_process(3, 3, cc) << endl;
function<int(const int&, const int&)> fa;
fa = add;
fa = sub;
fa = cc;
map < string, function<int(const int&, const int&) >> mapfuncItem;
mapfuncItem.emplace("+", add);
mapfuncItem.emplace("-", std::minus<int>());
mapfuncItem.emplace("*", Mulitiply());
mapfuncItem.emplace("/", [](const int& a, const int& b) {return a / b; });
mapfuncItem.emplace("%", mod);
auto funproc = [](const int& a, const int& b, function<int(const int&, const int&)> f) {
return f(a, b);
};
cout << "Function 调用 + :" << funproc(12, 14, mapfuncItem["+"]);
cout << "Function 调用 - :" << funproc(12, 14, mapfuncItem["-"]);
cout << "Function 调用 * :" << funproc(12, 14, mapfuncItem["*"]);
cout << "Function 调用 / :" << funproc(12, 14, mapfuncItem["/"]);
cout << "Function 调用 % :" << funproc(12, 14, mapfuncItem["%"]);
}