【发布时间】:2018-02-16 13:36:50
【问题描述】:
我想使用数值接收书中的布伦特方法来最小化一个函数。最小化例程的签名基本上如下所示:
float brent(float (*f)(float), float *xmin, "other parameters not relevant to question")
你可以猜到brent 返回f 的最小值并将其参数存储在xmin 中。
但是,我要最小化的函数的确切形式取决于附加参数。说
float minimize_me(float x, float a, float b)
一旦我决定了a 和b 的值,我想相对于x 将其最小化。
我可以简单地为所有调用的函数添加额外的参数,一直到brent,从而将其签名更改为
float brent(float (*f)(float,float,float),float a ,float b , float *xmin, ...)
因此每次都在brent 内调用(*f)(x,a,b)。然而,这对我来说似乎不是很优雅,因为我现在不仅要传递指向 minimize_me 的指针,还要传递整个函数链中的两个附加参数。
我怀疑可能有更优雅的解决方案,例如创建一个指向函数版本的指针,其中 a 和 b 作为固定值。
即使它是一个非常晦涩难懂的解决方案,也请不要对我隐瞒,因为我觉得它可以提高我对语言的整体理解。
【问题讨论】:
-
也许您正在寻找这个? stackoverflow.com/questions/7308449/…
-
你可以考虑用你的参数创建一个结构体并将它的指针传递给函数
-
@Nefrin 类似
typedef struct { float a; float b; float (*f)(double,double,double) } f_ab;?我做对了吗?我还不太习惯c。 -
是的@cmmnn,然后您可以使用
f_ab myAB创建一个实例并设置其值并将其指针传递给function(&myAB)的function(void* param),然后将其转换回f_ab类型。此方法允许将具有任意内容的结构传递给具有单个参数的函数 -
好的,我会在答案中巩固这一点
标签: c function-pointers