在c ++中将参数传递给lambda中的lambdas

时间:2018-01-23 08:16:30

标签: c++ lambda c++14

我试图想出一种方法将函数传递给使用lambdas的函数,请注意这是一个简化示例f0f1f...将是数值导数:

// innermost function
double g(double x, vector<double> pars){
  return x * pars[0] * pars[0];
}    
// some intermediate function
template <typename F>
auto f0(F const & f, double x, vector<double> pars) {
   return [f, pars](double x, vector<double> pars) {
     vector<double> pars_0(pars); 
     pars_0[0] = 0;
     return f(x, pars_0);
   };
}
// another intermediate function
template <typename F>
auto f1(F const & f, double x, vector<double> pars) {
   return [f, pars](double x, vector<double> pars) {
     vector<double> pars_1(pars); 
     pars_1[0] = 1;
     return f(x, pars_1);
   };
}
// selector function
template <typename F>
auto D(F const & f, double x, vector<double> pars, int degree) {
  if(0 == degree) {
    return f0(f, x, pars)(x, pars);
  } else {
    return f1(f, x, pars)(x, pars);
  }
}

到目前为止,我可以致电D(f, vars, 0)D(f, vars, 1)。现在,我想将D称为D(D(D(f, vars, 1), vars, 0), vars, 1),类似于D。所以我想template <typename F> auto D(F const & f, double x, vector<double> pars, int degree) { if(0 == degree) { return [f, x, pars](F const & f, int x, vector<double> pars) { return D(f0(f, x, pars)(x, pars)); // <<< ? }; } else { return // same stuff for the other function(s) } } 的返回类型必须再次为lambdas:

D(D(f, 0), 1)(f_args)(inner_D_args)

我只是不知道如何给他们参数。 像int sum = 0; for(int i = 0; i < 3; ++i ){ for(int j = 0; j < 3; ++j ){ for(int k = 0; k < 3; ++k ){ ... sum += D(...(D(g, i), j)...,k) (pars of the lambdas); // number of for loops depends on size of pars passed to f } } } 左右一样(这不起作用)。 最终,这是我想去的地方:

...

D(D(D(...)))意味着g的塔可能变得安静,取决于我的模型的复杂性D

  • 这是一个优雅的解决方案吗?
  • 您如何定义<select ng-model="personalDetail.fname" ng-options="x for x in allowedNames(personalDetail.fname)"> </select>
  • (我也很高兴其他想法)

感谢您的时间。

0 个答案:

没有答案