游戏开发论坛

 找回密码
 立即注册
搜索
123
返回列表 发新帖
楼主: sjinny

[C++][指针]关于指向成员函数的指针~

[复制链接]

30

主题

276

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
发表于 2004-8-18 23:24:00 | 显示全部楼层

Re:[C++][指针]关于指向成员函数的指针~

hash表也可以用 第14个帖子的union办法来解决。
但最好用虚函数解决。。。


那个union办法的主要精神就是 函数 调用的实质 就是 压件 和 call 。
一般的类 函数
class A{ fuc();}
都是遵从的__thiscall规范(传说中的__thiscall就是要传this进去的call).除非特别申明.
所以 在 class A{ fuc();}  class BBB{ kkk();}  里fuc 与 kkk的调用是没有什么不一样的。。。都是__thiscall()来调用的。。。能使调用产生区别的
只有参数列表,因为列表关系到压件的量。(所以要使用指针,指针同时避免了你的参数被C++转型)

所以我门要调用一个成员函数,只需要满足2点就够了,一是它的调用规范,2是它的地址(潜藏的this和函数自己的地址)。
比如你这样调用 a.fuc()时  .fuc()就是规范_thiscall()  而a.fuc的所代表的实际地址则 是函数的地址(a为this地址) .所以a.fuc()满足了两个条件,它就可以调用一个函数
而同样 b.kk() c.plmm() 他们的规范是和a.fuc()一至的,即都是.xxx(),所以我们可以用 b.kk()的规范+a的地址(this+函数) 来调用 A::fuc() . .
. . . .. 其实,你应该去找一本汇编的书籍看看函数那节,就明白我说的什么的,哎,看到我在这里规范过去过来的我都觉得自己在瞎拜。
union法就是用这点来做的,其实用union或void指针法生成,如果编译器有优化是该和直接的汇编码相差无几.使用union或void指针的主要目的只是为了绕过编译器的类型检查。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-17 08:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表