1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
#include <iostream>
#include <string>
#include <map>
using namespace std;
typedef int(*Function)(int,int);
typedef map<string,Function> Dispatcher;
int Add(int a, int b) { return a+b; }
int Sub(int a, int b) { return a-b; }
int Mul(int a, int b) { return a*b; }
int Cal(int a, int b, const string & f, const Dispatcher & d)
{
Dispatcher::const_iterator it;
it=d.find(f);
if (it==d.end())
{
cout << "function not found..." << endl;
return 0;
}
return it->second(a,b);
}
int main()
{
Dispatcher d;
d["add"]=Add;
d["sub"]=Sub;
d["mul"]=Mul;
cout << Cal(3,2,"add",d) << endl;
cout << Cal(3,2,"sub",d) << endl;
cout << Cal(3,2,"mul",d) << endl;
cout << Cal(3,2,"asdf",d) << endl;
cin.get();
return 0;
}
|