1

可能重复:
将指向成员函数的指针转换为普通指针

有一些代码

class TT {
public:
  void set();
  void par1(int, int);
  void par2(double, double);
};

typedef void(*Ptr1)(TT &, int, int);

typedef void(*Ptr2)(TT &, double, double);

void hello(Ptr1, Ptr2){...}

void TT::set()
{
  hello(&TT::par1, &TT::par2);
}

错误显示:

error C2664: 'hello' : cannot convert parameter 1 from 'void (__thiscall TT::* )(int,int)' to 'Ptr1'

请告诉我如何解决这个问题?

4

1 回答 1

3

你想这样做

typedef void(TT::*Ptr1)(int, int);
typedef void(TT::*Ptr2)(double, double);

并修复 hello 函数以获取指针,this因为您需要 this 指针来调用对象上的函数。

void hello(TT* obj,Ptr1 x, Ptr2 y){
    (obj->*x)(1,2);
}

查看这篇文章以获取有关成员函数指针的更多信息。

于 2012-11-27T02:20:29.443 回答