function<ElementType1 (ElementType2,ElementType3)>:表示接受一个ElementType2参数,一个 ElementType3参数,返回ElementTYpe1类型的可调用对象。
/**
function<ElementType1 (ElementType2,ElementType3)>:表示接受一个ElementType2参数,一个
ElementType3参数,返回ElementTYpe1类型的可调用对象。
*/
#include <iostream>
#include <functional>
#include <map>
using namespace std;
int add(int a,int b)
{
return a+b;
}
struct divide
{
int operator()(int m,int n)
{
return m/n;
}
};
int main()
{
map<string,function<int(int,int)> > binops;
auto mod=[](int m,int n){return m%n;};
binops.insert(make_pair("+",add));
binops.insert(pair<string,function<int(int,int)> >("-",minus<int>()));
binops.insert(make_pair("*",[](int i,int j){return i*j;}));
binops.insert({"/",divide()});
binops.insert({"%",mod});
printf("input you want calculate num and operate:\n");
int m,n;
string s;
cin >> m >> s >> n;
cout << binops[s](m,n) << endl;
cout << "\n调试:\n";
cout << binops["+"](3,5) <<endl;
cout << binops["-"](3,5) << endl;
cout << binops["*"](3,5) << endl;
cout << binops["/"](3,5) << endl;
cout << binops["%"](3,5) << endl;
return 0;
}
函数数组指针:
自己写的函数,lambda表达式都可以作为地址传递给函数数组指针,但是标准库中的functional
头文件下的 minus 等函数不能传递,定义的类,也不能传递。
并且函数数组指针还是以下标(下标从0开始)进行访问,并不方便,还是用map容器更加好一点
/**
自己写的函数,lambda表达式都可以作为地址传递给函数数组指针,但是标准库中的functional
头文件下的 minus 等函数不能传递,定义的类,也不能传递。
并且函数数组指针还是以下标(下标从0开始)进行访问,并不方便,还是用map容器更加好一点
*/
#include <iostream>
#include <functional>
#include <map>
using namespace std;
int add(int a,int b)
{
return a+b;
}
int sub(int a,int b)
{
return a-b;
}
//int mult(int a,int b)
//{
// return a*b;
//}
int divide(int a,int b)
{
return a/b;
}
//int mod(int a,int b)
//{
// return a%b;
//}
//struct divide
//{
// int operator()(int m,int n)
// {
// return m/n;
// }
//};
int main()
{
auto mult=[](int i,int j){return i*j;};
auto mod=[](int m,int n){return m%n;};
int (*binops[]) (int n ,int m)={add,sub,mult,divide,mod};
// binops.insert(make_pair("+",add));
// binops.insert(pair<string,function<int(int,int)> >("-",minus<int>()));
// binops.insert(make_pair("*",[](int i,int j){return i*j;}));
// binops.insert({"/",divide()});
// binops.insert({"%",mod});
printf("input you want calculate num and operate:\n");
int m,n;
int s;
cin >> m >> s >> n;
cout << binops[s](m,n) << endl;
cout << "\n调试:\n";
cout << binops[0](3,5) <<endl;
cout << binops[1](3,5) << endl;
cout << binops[2](3,5) << endl;
cout << binops[3](3,5) << endl;
cout << binops[4](3,5) << endl;
return 0;
}