【发布时间】:2019-11-09 13:53:55
【问题描述】:
我需要在动态链接库项目中传递函数。在这个项目中,我有两个功能:
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(或同一文件中的变量)。
【问题讨论】:
标签: c++ visual-studio function dll function-pointers