如:
double (CModalDlg::*p)(double);
可以这样声明吧?
之后怎样使用?
我试过:
double m;
m=(CModalDlg::*p)(5.0);这样是不行的。

解决方案 »

  1.   

    typedef double (CModalDlg::*MYFUNC)(double); 
    ...
    MYFUNC p=&CModalDlg::theRealFunc;
    ...
    double m=(this->*p)(5.0);
      

  2.   

    例如:定义
    double CModalDlg::fsin(double x)

       return sin(x);
    }
    用函数指针使用它
    double (CModalDlg::*p)(double);
    p=fsin;
    之后怎样调用?
      

  3.   

    问题已解决,但不知如何理解!
    是这样理解吗?
    typedef double (CModalDlg::*MYFUNC)(double);   //这里的::*怎样理解。
            //定义一个MYFUNC的类型,该类型是一个指向CModalDlg类,带一个double形参,返回一个double类型
            //的值,的函数指针的指针类型
    ...     
    MYFUNC p=&CModalDlg::theRealFunc;     //定义一个指针指向所要指向的函数。但为什么还要&呢?
                                               //函数名不是表示函数的首地址了吗?
    ... 
    double m=(this->*p)(5.0);            //这里的->*有如何通过指针取成员指针呢?
                                              //请指教一下?分数全是你的!
      

  4.   

    typedef定义了函数指针这样的标识符,后面可以采用MYFUNC定义函数指针。如果是成员函数,取地址并不和一般函数指针类似,而是得到了该函数在类里面的偏移量。this->*p 操作符->*表示在this内的地址加上theRealFunc在该类中的偏移量。于是传递参数,执行函数。
      

  5.   

    typedef double (CModalDlg::*MYFUNC)(double); 表示函数指针是指向CModalDlg类的,不能指向其他的类
    CModalDlg是类名,只有实例化才分配类中的函数才有地址,而对象也时有地址的,只有指明是哪个对象的才能唯一的指向该函数,&CModalDlg表示对象的地址。this就是表示当前对象的指针,它指向当前对象的地址。