void b() 
      { 
           ClassA *A=NEW ClassA(); 
           A->p=this->P1; //将静态函数p1赋给ClassA的P指针。
       } 
       void p1() { } 

解决方案 »

  1.   

    xdlous(虾米螺丝) :
     直接去掉static是不对的。xtuzhxing(xplore) :
      说的好像是有点道理,但不知道怎么下手。
      

  2.   

    ClassA

    public:void(ClassB::*p)() ;这里用成员函数指针,然后还需要一个ClassB的对象指针才能调用
    }ClassB
    {
    void b()
    {
    ClassA *A=NEW ClassA();
    A->p=ClassB::P1; //将静态函数p1赋给ClassA的P指针。
    }
    void p1() { }
    }
      

  3.   

    to akirya(坏[其实偶不是什么所谓的坏人]) :
      我的ClassA是公共对象,可能会被不同类调用。请问还有别的办法吗?
      

  4.   

    我的ClassA是公共对象,可能会被不同类调用。请问还有别的办法吗?
    这个和我说的方法不冲突啊.
      

  5.   

    akirya(坏[其实偶不是什么所谓的坏人]) :
    ClassA

    public:void(ClassB::*p)() ;这里用成员函数指针,然后还需要一个ClassB的对象指针才能调用
    }把classA作为公共对象时 ClassB::*p 我并不知道是classB还是classC......
      

  6.   

    呵呵~ 那就用多态
    classB classC从一个基类派生出来,这个地方用基类指针,然后通过这个基类指针调用虚函数.
      

  7.   

    那么是8行滴,除非你的B是从A派生滴另外,任何都地址都是数值 so,你要用变通的方法赋值是可以完成的(通过编译),但问题也随之而来,thiscall约定会用 ecx传this指针所以,如果你在p1中引用了类成员,很可能会导致程序异常变通的方法很简单,wsprintf(s,"%d",p1);p=atoi(s);(有人在封装线程类里用这个方法)
    其实嘛,当然不用那么麻烦,只要用__asm 转一下就OK了