Существует несколько дубликатов этого, но никто не объясняет, почему я могу использовать переменную-член для хранения указателя (в FOO
), но когда я пытаюсь использовать его с локальной переменной (в комментариях BAR
) это незаконно. Может ли кто-нибудь объяснить это?Функциональные указатели на функции-члены
#include <iostream>
using namespace std;
class FOO
{
public:
int (FOO::*fptr)(int a, int b);
int add_stuff(int a, int b)
{
return a+b;
}
void call_adder(int a, int b)
{
fptr = &FOO::add_stuff;
cout<<(this->*fptr)(a,b)<<endl;
}
};
class BAR
{
public:
int add_stuff(int a, int b)
{
return a+b;
}
void call_adder(int a, int b)
{
//int (BAR::*fptr)(int a, int b);
//fptr = &BAR::add_stuff;
//cout<<(*fptr)(a,b)<<endl;
}
};
int main()
{
FOO test;
test.call_adder(10,20);
return 0;
}
Чтобы избежать путаницы с подлинными указателями функций или переменными-членами типа «указатель на функцию», я избегаю вызова указателей на функции-члены, «указатели функций-членов». Во многих отношениях указатели на функции-члены имеют больше общего с указателями на элементы данных, чем с указателями функций. –