通过函数名字符串利用map执行函数

herostarone 2010-10-27 09:45:50
先说说我的引用,就是一个进程程把函数名 形参 以“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,可是我总不能把所有的函数都加入吧?而且形参呢,怎么区别,怎么解析?
...全文
216 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
herostarone 2010-11-08
  • 打赏
  • 举报
回复
谁给个号思路啊,形参怎么存
http://topic.csdn.net/u/20101102/23/7b10c3f3-1eb9-4984-a68a-b43c648449d0.html
这个帖子没人回哈,60分,随便回下我就给分了,还能返还30分给自己,郁闷
GIS_wudi 2010-11-08
  • 打赏
  • 举报
回复
还可以考虑用可变参函数进行实现
skyuser213 2010-11-08
  • 打赏
  • 举报
回复
参考下C++的名称粉碎法..
GIS_wudi 2010-11-08
  • 打赏
  • 举报
回复
形参类型必须要相同
如果不相同,全部用void*实现
muzizongheng 2010-10-28
  • 打赏
  • 举报
回复
一直这样用。。。
herostarone 2010-10-28
  • 打赏
  • 举报
回复
呵呵,上次我发过帖子,你也回答过,当时通过虚函数多态+动态dll弄出来一个,但是上面说不行,要用map,但是
typedef int (*p)(int i);
typedef int (*f)(int i,int j);
map<string,p> fun;
fun["fun_1"] = test;
(*fun["fun_1"])(3);
你看这种,f这个函数执行如何加入,而且形参如何确定啊

[Quote=引用 4 楼 visualeleven 的回复:]
又是这个,我上次也搞过这个
[/Quote]
Eleven 2010-10-28
  • 打赏
  • 举报
回复
又是这个,我上次也搞过这个
herostarone 2010-10-28
  • 打赏
  • 举报
回复
呵呵,谢谢,哪个高手能给个C++下的模式吗
[Quote=引用 2 楼 tiger9991 的回复:]
楼主,你这是“反射”机制吧,虽然是JAVA和C#里面的,但是很多高手都在讨论这个

看看这篇文章会对你有启发的

http://blog.csdn.net/wrq147/archive/2010/05/18/5603262.aspx
[/Quote]
傻X 2010-10-27
  • 打赏
  • 举报
回复
楼主,你这是“反射”机制吧,虽然是JAVA和C#里面的,但是很多高手都在讨论这个

看看这篇文章会对你有启发的

http://blog.csdn.net/wrq147/archive/2010/05/18/5603262.aspx

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧