如何在类定义中调用指针成员函数?

时间:2014-07-04 12:55:32

标签: c++ pointers

如何在类定义中调用指针成员函数? 我的代码:

//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 ++的新手,也许设计很奇怪!!

2 个答案:

答案 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]);