能否动态调用函数 如要从数据库内读取函数名称字符串,然后调用与该字符串名字相同的函数,该怎样调用? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用一个map建立函数名和函数指针的映射,从数据库取出函数名后再从map中得到函数指针执行就行了 那还不如给每个函数一个编号, 通过编号区别函数的调用:if(ID == 1217) func1217();else if(ID == 1218) func1218();... if(str="func1") func1(...);elseif(str="func2") func2(...);..... if ... then... 的做法不是不好,但如果在数据库中增加函数名记录,主调程序则要修改程序,不能实现自动维护。 #include "math.h"const CString Function[]={ "sin","cos","tan","log"};double (* pFun[] )(double)={ sin,cos,tan,log,};void Do(CString &strFun, double value){ int index=sizeof(pFun)/sizeof(*pFun)-1; while(index>=0 && Function[index] != strFun) index--; if(index<0) { MessageBox("没有该函数"); return; } value=pFun[index](value); char szResult[20]; sprintf(szResult,"%f",value); MessageBox(szResult);}Do(CString("sin"),123);//这样调用你所需要维护的仅仅是Function[]数组和 pFun[] 数组而已。当然,若你的函数是多个参数的,类似的再写一个 pFun2[]数组就行了。如const CString Function2[]={ "pow","fmod","Max","Min"};double (* pFun2[] )(double,double)={ pow,fmod,Max,Min}; PIP_ADAPTER_INFO结构问题? mfc的动态创建有什么作用呢? 如何把dll中弹出的对话框,作为exe中属性页的一个页面? 如何把MFC exe工程改为静态链接库 请问虚函数怎么理解??? 打印的作业文件能被截获并传输到另外一台电脑上打印吗?如何做? 请问用什么函数可以得到本执行程序的全路径?给分! 怎么将一张真彩色位图设置多文档程序的MainFrame背景?? 我要知道有几个根目录该用什么函数? 请问VC++6.0专业版与企业版有什么不同? 请教:ATL操作系统兼容性 关于编写计算机引导程序的问题。在线等待!!!
数据库取出函数名后再从map中得到函数指针
执行就行了
func1217();
else if(ID == 1218)
func1218();
...
func1(...);
elseif(str="func2")
func2(...);
.....
主调程序则要修改程序,不能实现自动维护。
const CString Function[]=
{
"sin","cos","tan","log"
};double (* pFun[] )(double)=
{
sin,cos,tan,log,
};void Do(CString &strFun, double value)
{
int index=sizeof(pFun)/sizeof(*pFun)-1;
while(index>=0 && Function[index] != strFun) index--; if(index<0)
{
MessageBox("没有该函数");
return;
}
value=pFun[index](value);
char szResult[20];
sprintf(szResult,"%f",value);
MessageBox(szResult);
}Do(CString("sin"),123);//这样调用你所需要维护的仅仅是Function[]数组和 pFun[] 数组而已。
当然,若你的函数是多个参数的,类似的再写一个 pFun2[]数组就行了。如
const CString Function2[]=
{
"pow","fmod","Max","Min"
};
double (* pFun2[] )(double,double)=
{
pow,fmod,Max,Min
};