Как вызвать функцию-член через указатель функции-члена?
Я хочу вызвать функции-члены через указатели-члены-функции. Вызывающая функция также является членом.
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);
Ответы
Ответ 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)();