如要从数据库内读取函数名称字符串,然后调用与该字符串名字相同的函数,
该怎样调用?

解决方案 »

  1.   

    用一个map建立函数名和函数指针的映射,从
    数据库取出函数名后再从map中得到函数指针
    执行就行了
      

  2.   

    那还不如给每个函数一个编号, 通过编号区别函数的调用:if(ID == 1217)
      func1217();
    else if(ID == 1218)
      func1218();
    ...
      

  3.   

    if(str="func1")
       func1(...);
    elseif(str="func2")
       func2(...);
    .....
      

  4.   

    if ... then... 的做法不是不好,但如果在数据库中增加函数名记录,
    主调程序则要修改程序,不能实现自动维护。
      

  5.   

    #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
    };