>>神鬼传奇C++<< 之对象中的函数指针转换?

tgtt 2003-08-24 12:19:00
class C
{
public:
void (*ptst)();
void st();
};
void kk();
void (*ptkk)();

void main(){
ptkk=&kk;//这儿可以
C temp;
temp.ptst=&(temp.st);//为什么这儿就不行了呢?
}
...全文
43 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
widewave 2003-08-24
  • 打赏
  • 举报
回复
搞成静态的,不要 this指针试试。
tgtt 2003-08-24
  • 打赏
  • 举报
回复
哦,那怎么样才能达到转换的目的呢?

class C
{
public:
C(void){
ptst=&st;//这样也不行
}
void (*ptst)();
void st();
};
晨星 2003-08-24
  • 打赏
  • 举报
回复
因为是两个默认的东西你看不到。
void kk();
其实是
void __cdecl kk();

void C::st();
实质上是:
void _thiscall C::st();

逻辑上后者比前者多一个参数(this指针),所以不能相互转换。
fengfeng2003 2003-08-24
  • 打赏
  • 举报
回复
多谢 lifanxi(Byron)
lifanxi 2003-08-24
  • 打赏
  • 举报
回复
举个例子:
class A
{
public:
void f() {};
void g() {};
};

int main()
{
void (A::*pf)();
pf = &A::f;
A a;
(a.*pf)(); //相当于a.f();
pf = &A::g;
(a.*pf)(); //相当于a.g();
}
请先理解这个例子,然后就可以推出上面的正确调用方法应该是:
(temp.*temp.ptst)();
或者更清楚一点:
(temp.*(temp.ptst))();
fengfeng2003 2003-08-24
  • 打赏
  • 举报
回复
上面的程序虽然能完成赋值,但如何调用呢?
谁能解释一下
temp.ptst();//error
temp.C::ptst();//error
到底该怎么办!!!
fengfeng2003 2003-08-24
  • 打赏
  • 举报
回复
class C
{
public:
void (C::*ptst)();
void st();
};
void kk();
void (*ptkk)();

void main(){
ptkk=&kk;//这儿可以
C temp;
temp.ptst=C::st;//OK!!!!!
}
ckacka 2003-08-24
  • 打赏
  • 举报
回复
这个标题好炫哦~~
wbh0360 2003-08-24
  • 打赏
  • 举报
回复
steedhorse(晨星)兄说的极是,
这关系到编译器低层的行为,参数的压站等。
YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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