因为一个类会用到多个回调函数, 而且这个类的多个地方都会调用, 为了避免麻烦, 所以想做一个回调函数表但是问题是:class A   调用B类的回调函数
Class BClass B :  public A, public CDialog1. 怎么定义一个回调函数表? 能不能定义回调函数表?
1. 现在想把B的回调函数传递给A类, 在什么时候传递给A不会出错呢?

解决方案 »

  1.   

    1、用函数指针
    将用到的函数定义成函数指针的样式,可以做成一个回调函数表 实际上是一个指针列表
    2、因为不太明白你的意思,不太好说,但如果用函数指针的方式的话将函数指针以参数方式传递给A应该是不会出错的3、需要注意的是函数指针的定义和回调函数必须是STATIC的
      

  2.   


    我得意思是:
    class B 有个多个静态函数
    static int CALLBACK ExecuteAction(LPVOID lParam,TIMER_ITEM stTimerItem); //执行 动作
    static int CALLBACK StopAction(LPVOID lParam,TIMER_ITEM stTimerItem); //停止 动作
             static CString CALLBACK GetPass()怎么把这些函数做到一个数组里面, 然后把这个数组传递给 class A, 然后A通过数组访问这些函数地址
      

  3.   

    struct cmd_info{
    char* const cmd;
    void (*funct)();
    };
    static cmd_info cmd_list[] ={
    {"ExecuteAction",ExecuteAction},
    {"StopAction",StopAction},
    {"GetPass",GetPass},
    {NULL,NULL}
    };
    static void do_cmd(
    const char *const cmd
    ){
    struct cmd_info *cur_cmd;
    cur_cmd = cmd_list;
    while(
    (cur_cmd!=NULL) && (::strcmp(cur_cmd->cmd,cmd)!=0))
    {
    cur_cmd++;
    }
    if(cur_cmd ==NULL){
     TRACE("Command not founded\n");
    }
    else{
    cur_cmd->funct();
    }
    }
    int main()
    {
    char cmd[100];
    memset(cmd,'\0',100);
    memcpy(cmd,"GetPass",50);//调GetPass回调函数
    do_cmd(cmd);
    }
    }
    以后你想正么做就真么做了
      

  4.   

    你的例子里面B类根本就是A的子类,搞不懂你为什么要定义成callback的,然后还用函数指针传来传去的。如果要要子类里调用父类的,你这样定义反而没法调用了。
      

  5.   

    codewarrior(会思考的草) :其实Class A是一个公共类, 很多DLL都会用到, 怕以后要修改, 所以用回调函数, 让每个DLL子类把处理函数传递 class A, 这样没问题吧?
      

  6.   

    “很多DLL会用到”,是说很多dll会用到A类里面的函数?
    可是看你后面的话,好像意思又是说A类会用到其他DLL里的函数。
      

  7.   

    jiangsheng(蒋晟.MSMVP2004Jan)
    姨,我怎么没有想到呢?