C++: Array of member function pointers to different functions

前端 未结 2 2010
滥情空心
滥情空心 2020-12-16 03:47

I have a class A which contains member functions foo() and bar() which both return a pointer to class B. How can I declare an array containing the functions foo and bar as a

2条回答
  •  执笔经年
    2020-12-16 04:46

    What you're looking for are pointers to member functions. Here is a short sample that shows their declaration and use:

    #include 
    
    class B {
    public:
      B(int foo): foo_(foo) {
        std::cout << "Making a B with foo_ = " << foo_ << std::endl;
      }
      ~B(void) {
        std::cout << "Deleting a B with foo_ = " << foo_ << std::endl;
      }
      int foo_;
    };
    
    class A {
    public:
      A(void) {
        funcs_[0] = &A::foo;
        funcs_[1] = &A::bar;
      }
    
      B* foo(void) {
        return new B(3);
      }
    
      B* bar(void) {
        return new B(5);
      }
    
      // Typedef for the member function pointer, for everyone's sanity.
      typedef B* (A::*BMemFun)(void);
      BMemFun funcs_[2];
    };
    
    int main(int argc, char *argv[]) {
      A a;
      for (int i = 0; i < 2; ++i) {
        A::BMemFun func = a.funcs_[i];
        // Call through the member function pointer (the .* operator).
        B* b = (a.*func)();
        delete b;
      }
      return 0;
    }
    

    The C++ FAQ section on pointers to member functions is where I found all this information.

提交回复
热议问题