C++ 函数映射使用讲解 (二)

2014-11-23 22:37:20 · 作者: · 浏览: 9
key) { map::iterator it = s_map.find((type_func)key); if (it != s_map.end()) { ptr_func pFun = it->second; if (pFun) return (this->*pFun)(false); } return NULL; } // 使用数组 映射 int operator() (int key,bool val) { if (type_begin < key && type_max_size > key) { ptr_func pFun = s_array[key]; if (pFun) return (this->*pFun)(val); } return NULL; } }; map CAnimal::s_map; CAnimal::ptr_func CAnimal::s_array[type_max_size]; ////////////////////////////////////////////////////////////////////////// // 非成员函数 void func_eat(int = 0) { } void func_run(int = 0) { } void func_walk(int =0) { } void func_cry(int = 0) { } typedef void (*ptrFun)(int); map g_map; ptrFun g_array[type_max_size]; int _tmain(int argc, _TCHAR* argv[]) { ////////////////////////////////////////////////////////////////////////// // 为了便于说明,下面代码不做安全检查 // 非成员函数映射2种用法 // init g_map[type_eat] = func_eat; g_map[type_run] = func_run; g_map[type_walk] = func_walk; g_map[type_cry] = func_cry; g_array[type_eat] = func_eat; g_array[type_run] = func_run; g_array[type_walk] = func_walk; g_array[type_cry] = func_cry; // using g_map[type_eat](1); g_map[type_run](2); g_map[type_walk](3); g_map[type_cry](4); g_array[type_eat](1); g_array[type_run](2); g_array[type_walk](3); g_array[type_cry](4); ////////////////////////////////////////////////////////////////////////// // 成员函数映射使用 CAnimal Dog; Dog.Process(type_eat); Dog.ProcessByUseMap(type_run,true); Dog.ProcessByUseArray(type_cry,false); Dog[type_walk]; Dog(type_sleep,true); Dog(type_run,false); return 1; }