J*****n 发帖数: 4859 | 1 比如我有一个function pointer f
double (*f) (const double& p, const double& q=0);
我希望另一个函数g调用它:g(f),那么g的定义该如何写?
另一个问题是如果f的参数个数未知,那么g又该如何写?
谢谢。 | t****t 发帖数: 6806 | 2 pointer to function里不准带default parameter [8.3.6]
void g(double (*f)(const double&, const double&));
f的参数个数未知, g当然不能写, 除非你用template
但是即使你用了template, 拿到了(未知参数个数/类型)的function pointer f, 你打
算怎么调用它呢?
【在 J*****n 的大作中提到】 : 比如我有一个function pointer f : double (*f) (const double& p, const double& q=0); : 我希望另一个函数g调用它:g(f),那么g的定义该如何写? : 另一个问题是如果f的参数个数未知,那么g又该如何写? : 谢谢。
| J*****n 发帖数: 4859 | 3
我有一些离散的点(x_i,y_i),先用某种曲线拟合的技巧(样条,多项式回归)得出其拟
合函数f(x),然后再把f(x)传到g中,供g使用。
现在的问题是f的参数个数不一定,比如用多项式回归,那么f中不但要传x_i的值,还
要传一个多项式的degree:
double f (vector& x_i, const double& degree);
如果用三次样条插值,虽然不需要degree了,但是除了x_i外还要传一个vector进去用
于存放三次样条的knots(边界点):
double f (vector& x_i, vector& knots);
作为g函数本身,并不知道用户用哪种方法去拟合,也就是不知道f所带的参数是怎么样
的。
请教该如何解决这个问题。
谢谢。
【在 t****t 的大作中提到】 : pointer to function里不准带default parameter [8.3.6] : void g(double (*f)(const double&, const double&)); : f的参数个数未知, g当然不能写, 除非你用template : 但是即使你用了template, 拿到了(未知参数个数/类型)的function pointer f, 你打 : 算怎么调用它呢?
| s******n 发帖数: 21 | 4 你能改g函数的接口吗? 可以试一下 pass functor.
【在 J*****n 的大作中提到】 : : 我有一些离散的点(x_i,y_i),先用某种曲线拟合的技巧(样条,多项式回归)得出其拟 : 合函数f(x),然后再把f(x)传到g中,供g使用。 : 现在的问题是f的参数个数不一定,比如用多项式回归,那么f中不但要传x_i的值,还 : 要传一个多项式的degree: : double f (vector& x_i, const double& degree); : 如果用三次样条插值,虽然不需要degree了,但是除了x_i外还要传一个vector进去用 : 于存放三次样条的knots(边界点): : double f (vector& x_i, vector& knots); : 作为g函数本身,并不知道用户用哪种方法去拟合,也就是不知道f所带的参数是怎么样
| t****t 发帖数: 6806 | 5 the extra parameters of f() is for f() only, right? you encapsulate the
extra parameters WITH function pointer f, and make it an object. the object
may inherit from a common type and g() call f() through virtual functions;
or the object could be unrelated and templated g() call f() through a common
generic interface.
【在 J*****n 的大作中提到】 : : 我有一些离散的点(x_i,y_i),先用某种曲线拟合的技巧(样条,多项式回归)得出其拟 : 合函数f(x),然后再把f(x)传到g中,供g使用。 : 现在的问题是f的参数个数不一定,比如用多项式回归,那么f中不但要传x_i的值,还 : 要传一个多项式的degree: : double f (vector& x_i, const double& degree); : 如果用三次样条插值,虽然不需要degree了,但是除了x_i外还要传一个vector进去用 : 于存放三次样条的knots(边界点): : double f (vector& x_i, vector& knots); : 作为g函数本身,并不知道用户用哪种方法去拟合,也就是不知道f所带的参数是怎么样
|
|