Если я хорошо понимаю, проблема в том, как передать функции (или, точнее, указатели на функции) в качестве аргумента и как их использовать.
Я понимаю, что setup
содержит указатель на функцию с именем objective
:
struct TSolver_Setup {
const TObjective_Function objective;
//.... (apparently a lot of other stuff you didn't talk about)
};
Я также понимаю, что вам нужно вызвать эту функцию в start
(), встрока, в которую вы помещаете комментарий заполнителя. Однако неясно, где следует хранить значение, а не какие аргументы следует использовать, поэтому я буду использовать некоторые предположения и заполнители. Если бы у вас был доступ к setup
, вы могли бы просто сделать:
ffa[i] = setup.objective (&whatdata, &what solution);
Но так как вы не передаете setup
в start()
, вам придется по крайней мере передать функцию для запускаиспользуя дополнительный параметр f
:
void start(size_t problem_size, size_t max_generation, size_t population_size, const double* lower_bound, const double* upper_bound, TObjective_Function f)
{
...
ffa[i] = f (&whatdata, &what solution);// <---------- HERE IT IS ----------
...
}
и передать параметр, вам просто нужно передать objective
:
HRESULT solve_serial(solver::TSolver_Setup &setup, solver::TSolver_Progress &progress) {
start(setup.max_generations, setup.population_size, setup.problem_size, setup.lower_bound, setup.upper_bound, setup.objective);
return 0; // you must return something !
}
Если это не отвечает на ваш вопрос, дайте мне знать, чтобы я скорректировал свой ответ. Но в этом случае вам необходимо сначала уточнить, в чем конкретно заключается ваша проблема, что вы пытались, и указать недостающие элементы, которые позволили бы нам повторить проблему.