gpt4 book ai didi

c++ - 数字食谱 : How to pass function as argument of function newt in c++

转载 作者:行者123 更新时间:2023-11-28 00:53:08 25 4
gpt4 key购买 nike

我的问题与数字食谱有关。我有一个全局函数,它计算要最小化的函数 vector

VecDoub vecfunc(VecDoub_I x) {
// code is here
}

在类函数 run 中,我尝试调用 Numerical Recipes 函数 newt,它读取我的函数 vecfunc,如图所示,

class A {
void run() {
VecDoub_IO pt;
pt.resize(2);
pt[0] = 0.5;
pt[1] = 0.5;
bool check = false;
newt<VecDoub>(pt, check, &vecfunc);
}
}

函数 newt 声明为

template <class T>
void newt(VecDoub_IO &x, Bool &check, T &vecfunc)

为什么会出现以下编译器错误?

error C2664: 'newt' : cannot convert parameter 3 from 'VecDoub (__cdecl *)(VecDoub_I)' to 'VecDoub &'

最佳答案

在通话中newt您明确指定 TVecDoub (您指定了 newt<VecDoub> )但是您将函数的地址传递给它,因此编译器无法将您的函数转换为 VecDoub& .如果你想要 VecDoub&newt然后调用vectfunc并将其存储在临时变量中,然后将该变量传递给函数(因为在 newt 中,最后一个参数是对 T 的引用)但是如果您确实需要 newt 中的函数那你为什么写newt<VecDoub>(pt, check, &vecfunc)虽然你可以写 newt(pt, check, &vecfunc)让 C++ 为你推断类型?除此之外,为了在 newt 中接收函数不要通过引用获取它们,而是通过值获取它们,所以 newt应声明为:

template <class T>
void newt(VecDoub_IO &x, Bool &check, T vecfunc)

因为函数通常是小对象或指针,所以这会起作用并且不会降低性能

关于c++ - 数字食谱 : How to pass function as argument of function newt in c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12977823/

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