#include<iostream> #include<algorithm> #include<string> #include<vector> #include<map> using namespace std; class FuncFactory { public: typedef void (FuncFactory::*Function)(string str); typedef void (*OutsideFun)(); map<string,Function> funcs; map<string,OutsideFun> outfuns; void AddFunction(string str,OutsideFun fun) { outfuns[str]=fun; } FuncFactory() { funcs["ShowA"]=&FuncFactory::ShowA; funcs["ShowB"]=&FuncFactory::ShowB; funcs["ShowC"]=&FuncFactory::ShowC; } void ShowA(string str) { cout<<"inside the function ShowA "<<str<<endl; } void ShowB(string str) { cout<<"inside the function ShowB "<<str<<endl; } void ShowC(string str) { cout<<"inside the function ShowC "<<str<<endl; } void Invoke(string str,string para) { Function fun=funcs[str]; (this->*fun)(para); } void BegInvoke(string str) { outfuns[str](); } }; void Display() { cout<<"the is the function display"<<endl; } void Speak() { cout<<"this is the function speak"<<endl; } int main() { FuncFactory *funcs=new FuncFactory(); funcs->Invoke("ShowA","AAA"); funcs->Invoke("ShowB","BBB"); funcs->Invoke("ShowB","CCC"); funcs->AddFunction("Display",Display); funcs->AddFunction("Speak",Speak); funcs->BegInvoke("Display"); funcs->BegInvoke("Speak"); delete funcs; return 0; }