例如:
class A{
typedef void(A::*PFUN)();
public:
    void function();
    void callfunc();
……
};void A::function()
{
   ……
}void A::callfunc()
{
   ……
   PFUN ptr=function;
//下面是我用的方法
//_asm
//{
//    call ptr;
//}
//在我的机子上编译通不过,另一台机子上可以。
//请问大虾们,又没有别的方法通过上面的ptr(即指向成员函数的指针)
//调用成员函数?多谢了!
}

解决方案 »

  1.   

    在我的印象中,函数作为参数传入在OpenGL中用的较多,
    那是一种称为回调的方法,譬如说:
    void function((A::*PFUN)());调用的时候可以function(prt);
      

  2.   

    用法好像是对的, 不过, 你用 内嵌汇编 这样调用 肯定不对,
    成员函数(非static), 之所以在typedef 的时候写成 A::* 的形式, 是因为类的实现要求 隐式的传入的一个this 指针 给成员函数, 而 不同的编译器在实现时,也并没有一个统一的规定 this 指针 必须在第一个 或 最后一个参数传, 但使用 A::* 形式的函数指针, 编译器肯定认识, 一般这样的调用形式为:
     
     PFUN ptr=function; (this->*ptr)(); 至于asm 怎么写, 不是很清楚
      

  3.   

    反正ptr函数需要一个this指针作为参数,而参数是通过堆栈传递
    要确保ptr函数能取得正确的参数,但是你并没有把参数入栈