小编t35*_*354的帖子

C++:使用任意数量的参数传递函数作为参数

很长一段时间的浏览器,第一次问问这里.我编写了许多用于执行各种一维数值积分方法的脚本,并将它们编译成一个库.我希望该库尽可能灵活地集成它的功能.

这里我举一个例子:一个非常简单的梯形规则示例,我将指针传递给要集成的函数.

// Numerically integrate (*f) from a to b
// using the trapezoidal rule.
double trap(double (*f)(double), double a, double b) {
  int N = 10000;
  double step = (b-a)/N;
  double s = 0;
  for (int i=0; i<=N; i++) {
    double xi = a + i*step;
    if (i == 0 || i == N) { s += (*f)(xi); }
    else { s += 2*(*f)(xi); }
  }
  s *= (b-a)/(2*N);
  return s;
}
Run Code Online (Sandbox Code Playgroud)

这适用于只接受一个参数的简单函数.例:

double a = trap(sin,0,1);
Run Code Online (Sandbox Code Playgroud)

但是,有时我可能想要集成具有更多参数的东西,例如二次多项式.在该示例中,系数将在集成之前由用户定义.示例代码:

// …
Run Code Online (Sandbox Code Playgroud)

c++ templates function-pointers functor

9
推荐指数
1
解决办法
1784
查看次数

标签 统计

c++ ×1

function-pointers ×1

functor ×1

templates ×1