Как передать функцию-член в функцию, используемую в другой функции-члене?

Я нашел кое-что о своей проблеме, но я не очень хорошо понимаю. Мне нужно сделать что-то вроде этого:

class T
{
double a;
public:
double b;
void setT(double par)
{
a = par;
}

double funct(double par1)
{
return par1 / a;
}

void exec()
{
b = extfunct(funct, 10);
}
};

double extfunct(double (*f)(double),double par2)
{
return f(par2)+5;
}

Работа и функция только для примера, но структура такова. Причина этой структуры в том, что у меня есть предварительно созданный класс, который находит минимум функции gived (в данном примере это extfunct). Поэтому я должен использовать его для функции-члена класса. Я понял разницу между указателем на функцию и указателем на функцию-член, но я не понимаю, как это написать. Спасибо, и извините за плохое объяснение проблемы.

0

Решение

Используйте указатель на функцию-член:

struct Foo
{
void f(int, int) {}
void g(int, int) {}

void execute((Foo::*ptmf)(int, int), int a, int b)
{
// invoke
(this->*ptmf)(a, b);
}
};

Использование:

Foo x;
x.execute(&Foo::f, 1, 2);   // calls x.f(1, 2)
x.execute(&Foo::g, 2, 1);   // calls x.g(2, 1)

Эти указатели работают, как и ожидалось, с виртуальными функциями.

1

Другие решения

Других решений пока нет …