将对象信息传递给成本函数
Passing object information to cost function
这是问题所在。我使用minpack进行非线性优化。成本函数具有以下特征:
void cost_function(const int* n, const int* m,const double *p, double *x, int* iflag)
n——初始点的大小m-函数向量的大小p-起始点x函数矢量
我有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使用这个全局对象来接收所需的信息。但这并不好。这个问题的正确解决方案是什么?谢谢
如果这些m
、n
、fvec
数组可以是类成员,则可以使用offsetof
宏来恢复类的地址。(关于如何做到这一点,请阅读非标准container_of
宏的解释)
如果它们是动态分配的,那就更难了,但你可以在缓冲区中分配额外的空间,并在实际的数组数据前面放一个指向类的指针。
相关文章:
- 如何使用单独文件中的派生类访问友元函数对象
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 有没有办法将重载的类函数绑定到函数对象?
- 将指针传递到成员的指针,从模板参数包到函数对象
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- 隐式转换为比较函数对象(函子)用于 std::sort 而不是 std::map?
- C++使用函数对象的线程,如何调用多个析构函数而不是构造函数?
- 如何通过接口将函子分配给函数对象
- 对std::函数对象的调用不匹配,该对象是指向成员函数的指针
- 指向std::invoke中成员函数对象的指针
- 如何成功地将函数对象(或lambda)传递给trackbar回调的第二个参数(void*)
- "std::function"的简单版本:函数对象的生存期?
- C++ 将函数对象作为左值和/或右值传递
- SFINAE 用于具有默认参数的函数对象
- 构造函数对象赋值是否泄漏内存
- 如何发送通过绑定到函数/方法创建的函数对象?
- std::for_each 与函数对象
- 将函数对象传递给 std::function
- 访问执行策略for_each函数对象中的迭代器
- 通过C++函数对象类访问参数