gpt4 book ai didi

c++ - 将对象信息传递给成本函数

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

问题来了。我使用 minpack 进行非线性优化。成本函数具有以下签名:

void cost_function(const int* n, const int* m,const double *p, double *x, int* iflag)

n - 初始点的大小m - 函数 vector 的大小p - 初始点x - 函数 vector

我有 for 循环,我在其中循环访问对象数组。每个对象都包含优化函数的输入信息。

for(int counter = 0; i < num_of_objects; ++counter)
{
//get information from object
//call optimization function
lmdif1_(cost_function, m, n, initial_point, X, precision, info, iwa, wa, lwa);
}

但在成本函数中,我需要与当前对象相关联的特定值。如果成本函数是一个类成员,那么指针的类型就会错误,并且无法将此指针传递给 lmdif1_。

所以现在我有一个临时解决方案,使用全局对象。

for(int counter = 0; i < num_of_objects; ++counter)
{
//get information from object
//call optimization function
global_obj = object;
lmdif1_(cost_function, m, n, initial_point, X, precision, info, iwa, wa, lwa);
}

然后 cost_function 使用这个全局对象来接收所需的信息。但这不好。这个问题的正确解决方案是什么?谢谢。

最佳答案

如果那些 mnfvec 数组可以是类成员,您可以使用 offsetof宏来恢复类的地址。 (关于如何做到这一点,请阅读 this explanation of the non-standard container_of macro )

如果它们是动态分配的,那就更难了,但是你可以在缓冲区中分配额外的空间,并在实际数组数据前面放置一个指向你的类的指针。

关于c++ - 将对象信息传递给成本函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9068647/

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