gpt4 book ai didi

c++ - 传递函数到动态链接库

转载 作者:太空宇宙 更新时间:2023-11-04 12:30:33 25 4
gpt4 key购买 nike

我需要在动态链接库项目中传递函数。在这个项目中我有两个功能:

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(或同一文件中的变量)。

最佳答案

如果我理解得很好,您遇到的问题只是关于如何将函数(或更准确地说是函数指针)作为参数传递以及如何使用它们。

我知道 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 !
}

如果这不能回答您的问题,请告诉我,以便我调整我的答案。但在这种情况下,您首先需要弄清楚您的问题到底是什么,您尝试了什么,并提供可以让我们重复该问题的缺失元素。

关于c++ - 传递函数到动态链接库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58779964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com