在mfc中,如何定义一个l类的函数指针,怎样使用一个类里面的函数指针

xkjwzx 2009-05-29 11:27:03
如:
double (CModalDlg::*p)(double);
可以这样声明吧?
之后怎样使用?
我试过:
double m;
m=(CModalDlg::*p)(5.0);这样是不行的。
...全文
286 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xkjwzx 2009-05-31
  • 打赏
  • 举报
回复
多谢上面各位的帮助!
zhihuizhilv 2009-05-29
  • 打赏
  • 举报
回复
double d1 = p(1.0);
xkjwzx 2009-05-29
  • 打赏
  • 举报
回复
例如:定义
double CModalDlg::fsin(double x)
{
return sin(x);
}
用函数指针使用它
double (CModalDlg::*p)(double);
p=fsin;
之后怎样调用?
ok1234567 2009-05-29
  • 打赏
  • 举报
回复
typedef double (CModalDlg::*MYFUNC)(double);
...
MYFUNC p=&CModalDlg::theRealFunc;
...
double m=(this->*p)(5.0);
deng335995 2009-05-29
  • 打赏
  • 举报
回复
typedef double (CModalDlg::*MYFUNC)(double);

表示函数指针是指向CModalDlg类的,不能指向其他的类


CModalDlg是类名,只有实例化才分配类中的函数才有地址,而对象也时有地址的,只有指明是哪个对象的才能唯一的指向该函数,&CModalDlg表示对象的地址。this就是表示当前对象的指针,它指向当前对象的地址。
j8daxue 2009-05-29
  • 打赏
  • 举报
回复
typedef定义了函数指针这样的标识符,后面可以采用MYFUNC定义函数指针。

如果是成员函数,取地址并不和一般函数指针类似,而是得到了该函数在类里面的偏移量。

this->*p 操作符->*表示在this内的地址加上theRealFunc在该类中的偏移量。于是传递参数,执行函数。


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

正解!

16,471

社区成员

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

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

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