Подтвердить что ты не робот

Как вызвать функцию-член через указатель функции-члена?

Я хочу вызвать функции-члены через указатели-члены-функции. Вызывающая функция также является членом.

class A;

typedef int (A::*memFun)();

class A
{
    int P(){return 1;}
    int Q(){return 2;}
    int R(){return 3;}

    int Z(memFun f1, memFun f2)
    {
        return f1() + f2(); //HERE
    }
public: 
    int run();
};

int A::run()
{
    return Z(P, Q);
}

int main()
{
    A a;
    cout << a.run() << endl;
}

Я делаю это неправильно и получаю ошибку -

main.cpp:15:19: error: must use '.*' or '->*' to call pointer-to-member function in 'f1 (...)', e.g. '(... ->* f1) (...)'
         return f1() + f2(); //HERE

Пожалуйста, покажите правильный способ сделать это.

EDIT - есть еще одна ошибка, которая решается с помощью

return Z(&A::P, &A::Q);
4b9b3361

Ответ 1

(this->*f1)() + (this->*f2)();

Независимо от того, вызываете ли вы его внутри класса, вы должны явно указать объект, на который вызывать (в данном случае this). Также обратите внимание на требуемые круглые скобки. Неверно следующее:

this->*f1() + this->*f2()

Ответ 2

Вот так:

(this->*f1)() + (this->*f2)()

Ответ 3

Пока вы не показываете его, вы, скорее всего, будете иметь ошибки при вызове Z.

Вам нужно вызвать функцию следующим образом:

Z(&A::P, &A::Q)

Ответ 4

вы должны использовать этот

(this->*f1)();