|
发表于 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指针的主要目的只是为了绕过编译器的类型检查。 |
|