如何在类定义中调用指针成员函数? 我的代码:
//Myclass.h
struct Booking{
int src;
int dest;
int pos;
};
class MyClass{
public:
void ExecutePlan();
private:
struct FlightPlan{
string name;
vector<Booking> bookings
};
typedef FlightPlan FP;
FP firstplan;
FP secondplan;
void FirstPlan(Booking& book);
void SecondPlan(Booking& book);
void Execute(FP& fplan, void (MyClass::*mptr)(Booking& book));
};
// Myclass.cpp
void MyClass::FirstPlan(Booking& book){
// do something with booking
}
void MyClass::SecondPlan(Booking& book){
// do something with booking
}
void MyClass::Execute(FP& fplan, void(MyClass::*mptr)(const FlightPlan& fp)){
for (int i=0; i<.fplan.bookings.size(); i++){
cout << "Executing Plan: "<< fplan.name << endl;
// Problematic line ...
mptr(bookings[i]); // <----- can't compile with this
}
}
void MyClass::Execute(){
// is this the correct design to call this member functions ???
Execute(firstplan, &MyClass::FirstPlan)
Execute(secondplan, &MyClass::SecondPlan)
}
如何构造Execute Function以将成员函数作为指针接收?
请问:我是C ++的新手,也许设计很奇怪!!
保
答案 0 :(得分:3)
如何在类定义中调用指针成员函数?
与成员名称不同,成员指针不会隐式应用于this
。你必须明确:
(this->*mptr)(fplan.bookings[i]);
这是调用此成员函数的正确设计???
除了一些明显的错误(比如在这里和那里丢失;
,在const FlightPlan&
的定义中说Booking&
你的意思是Execute
,其余的代码看起来很好。具体地
Execute(firstplan, &MyClass::FirstPlan)
Execute(secondplan, &MyClass::SecondPlan)
是获取成员函数指针的正确语法。
答案 1 :(得分:1)
调用成员函数指针的运算符是->*
。由于您想在this
对象上调用它,因此需要使用
(this->*mptr)(bookings[i]);