通过函数名字符串利用map执行函数
先说说我的引用,就是一个进程程把函数名 形参 以“fun 1 3”形式传输过来,我知道这个函数是int fun(int,int)型的,是C语言格式,没有重载,然后我这个进程解析函数,然后执行。(我最终的执行也是调用dll的函数)
有一个结构框架已经做好了,也基本实现了功能:
是就是按“3 fun 1 3”格式发送过来的(第一个3的意思是函数的格式是3,即int fun(int,int),就针对每一个函数的类型定义了一个类,继承于一个基类(里面两个虚函数),然后通过多态虚函数的方法,先判断类型,然后再new一个对象,然后解析处理,这样就完事了,可是在经过大家的讨论后,都不支持我的做法,缺点:难理解,不清晰,改动麻烦。但是我感觉还是挺清晰的,就是个虚函数多态问题。
class Fun
{
public:
virtual void parse() ;
public:
virtual void execute(void) ;
};
class C_VOID_FUN_VOID :public Fun //VOID FUN();
{
public:
virtual void parse();
virtual void execute(void);
};
class C_VOID_FUN_INT :public Fun //VOID FUN(INT);
{
public:
virtual void parse();
virtual void execute(void);
public:
string para_int;//针对没种类型都定义相应的参数,然后再做转换
};
经过讨论,让我做成一个map查表的问题,说是通过函数名,然后查表,然后再执行,可是我想不出一个好框架,如何实现这个功能呢?
int test(int i)
{
cout<<i<<endl;
return 0;
}
typedef int (*p)(int i);
map<string,p> fun;
fun["fun_1"] = test;
(*fun["fun_1"])(3);
这样可以把一个指针加入map,可是我总不能把所有的函数都加入吧?而且形参呢,怎么区别,怎么解析?