Я рассмотрел верхние ответы C++ на шаблон посетителя и указатели на функции-члены; но я все еще не могу понять, как должен быть разработан следующий (довольно простой) сценарий.Функции указателей функций C++
В базовом примере я хочу иметь класс оптимизатора. Учитывая функцию-член другого класса, он находит некоторое оптимальное значение. Что-то вроде этого:
class Optimizer{
public:
typedef double (*Func1d)(double);
typedef double (*Func2d)(double,double);
void Optimize1d(Func1d* f1Ptr, double& x);
void Optimize2d(Func2d* f2Ptr, double& x, double& y);
};
и два пример класса:
class A {
double A1d(double x){return x;}
};
class B{
double B2d(double x, double y){return x+y;}
};
и основная функция, которую я хотел бы иметь возможность использовать следующим образом:
void main()
{
Optimizer opt;
double xA_opt, xB_opt, yB_opt;
opt.Optimize1d(&A::A1d,xA_opt);
opt.Optimize2d(&B::B2d, xB_opt, yB_opt);
}
Но до сих пор, Я не могу заставить его работать. Я не хочу, чтобы оптимизатор напрямую держал указатели на объекты типа A и B; потому что тогда ему нужно быть знакомым с этими объектами.
Надеюсь, этот вопрос имеет смысл. Благодаря!
Зачем нужны указатели, а не виртуальные функции и интерфейс? –
Я не «женат», чтобы использовать указатели. вот почему я думаю, что это вопрос дизайна, а не вариант реализации. Возможно, я должен снова пометить. Я был бы признателен за предложения! – zuuz
Могут ли эти функции быть статическими (A :: A1d, B :: B2d)? –