我的应用程序库需要调用一个优化例程:
err = optim(int n, double *x, double *f, void *obj)
然后该例程将调用目标函数来请求目标函数值。
void obj(int n, double *x, double *f)
optim() 是外部库的一部分。optim() 和 obj() 的签名是固定的。
该函数obj()
需要访问单个对象“模型”中包含的数据。所有其他函数都传递指向模型对象的指针。因此,运行优化器的调用可能类似于:
err = doOptimize(model)
doOptimize()
将设置问题并致电optim()
err= optim(model->n, model->x, model->f, model->obj)
问题是,除了、和之外,obj()
函数还能访问对象中的变量吗?函数需要调用需要对象进行实际计算的其他函数:model
n
x
f
obj()
model
updateParms(model);
computeF(model);
我不确定在obj()
没有实际句柄的情况下如何进行这些调用?以下可以工作吗?
updateParms();
computeF();
谢谢,