64,648
社区成员
发帖
与我相关
我的任务
分享
//FuncPointEx.h
#ifndef __FUNCPOINTEX__H__
#define __FUNCPOINTEX__H__
#endif
#include <map>
using namespace std;
typedef void (* PFUNC_EXAMPLE)(void *pobj, char *data, int length);
typedef map<char *, PFUNC_EXAMPLE> UDT_MAP_CHAR_PFUNC_EXAMPLE;
class CFuncPointEx
{
public:
static void Func_A(void *pobj, char *data, int length);
static void Func_B(void *pobj, char *data, int length);
static void Func_C(void *pobj, char *data, int length);
};
class CFuncManager
{
public:
CFuncManager(void);
void RegisterFunc(char *func_name, PFUNC_EXAMPLE pfunc_ex);
PFUNC_EXAMPLE GetFunc(char *func_name);
private:
UDT_MAP_CHAR_PFUNC_EXAMPLE pfunc_map;
};
// FuncPointEx.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "FuncPointEx.h"
void CFuncPointEx::Func_A(void *pobj, char *data, int length)
{
printf("Func_A\n");
}
void CFuncPointEx::Func_B(void *pobj, char *data, int length)
{
printf("Func_B\n");
}
void CFuncPointEx::Func_C(void *pobj, char *data, int length)
{
printf("Func_C\n");
}
CFuncManager::CFuncManager(void)
{
}
void CFuncManager::RegisterFunc(char *func_name, PFUNC_EXAMPLE pfunc_ex)
{
pfunc_map.insert(pair<char *, PFUNC_EXAMPLE>(func_name, pfunc_ex));
}
PFUNC_EXAMPLE CFuncManager::GetFunc(char *func_name)
{
return pfunc_map.find(func_name)->second;
}
int _tmain(int argc, _TCHAR* argv[])
{
CFuncManager cfunc_m;
cfunc_m.RegisterFunc("Func_A", &CFuncPointEx::Func_A);
cfunc_m.RegisterFunc("Func_B", &CFuncPointEx::Func_B);
cfunc_m.RegisterFunc("Func_C", &CFuncPointEx::Func_C);
(cfunc_m.GetFunc("Func_A"))(NULL, NULL, 0);
(cfunc_m.GetFunc("Func_B"))(NULL, NULL, 0);
(cfunc_m.GetFunc("Func_C"))(NULL, NULL, 0);
system("pause");
return 0;
}