成员函数指针指向函数指针?

时间:2012-11-27 02:16:38

标签: c++ visual-studio-2008-sp1

  

可能重复:
  Cast pointer to member function to normal pointer

有一些代码

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'

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

1 个答案:

答案 0 :(得分: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);
}

检查this post以获取有关成员函数指针的更多信息。