Search code examples
c++compiler-errorspointer-to-membernon-static

C++: member call to non-static member function pointer


Possible Duplicate:
C++ member-function pointer
How to invoke pointer to member function when it's a class data member?

I've only recently started using C++, so I apologize if the following contains any trivial mistakes, or if I missed an easier solution. I would like to achieve something like this:

class ClassA {

typedef double (ClassA::*CondFunc)();
 public:
    ClassA(int x, int y) {

        value_ = x;

        switch (y) {
            case 0:
                condFunc_ = &ClassA::condA;
                break;
            case 1:
                condFunc_ = &ClassA::condB;
            default:
                break;
        }
    }

    ~ClassA();

    int value_;
    CondFunc condFunc_;
    double condA() { return 2.0*value_; }
    double condB() { return 4.0*value_; }

    void Test() {
        int a = condFunc_(); // compile error
    } 
};

but get a compile error in Test(). Please note that this is a vastly simplified function and is not supposed to make any sense. I've searched this forum and elsewhere for answers, but am still not sure whether defining/calling such non-static member function pointers is even possible. The only plausible hint/solution I've come across employs a static wrapper function to achieve something similar. I'd be grateful for any help/clarifications.


Solution

  • You have to call the member pointer function like this:

        int a = (this->*condFunc_)();