我需要在动态链接库项目中传递函数。在这个项目中,我有两个功能:
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);
}
void start(size_t problem_size,size_t max_generation,size_t population_size,const double* lower_bound,const double* upper_bound)
{
while (t <= MaxGeneration)
{
for (i = 0; i < n; i++)
{
// ---------- HERE I NEED TO USE PASSED FUNCTION -------------
f[i] = function(ffa[i]); // obtain fitness of solution
I[i] = f[i]; // initialize attractiveness
}
}
}
solve-serial
是从外部程序调用的,它将获得&setup
的功能,我需要在函数start
内传递我将要使用的功能。
solver::tsolver_Setup
的外观如下:
using TObjective_Function = double(IfaceCalling*)(const void *data,const double *solution);
struct tsolver_Setup {
const TObjective_Function objective;
};
如何传递功能?我无法更改solver::tsolver_Setup
,但可以更改start
(或同一文件中的变量)。