我试图想出一种方法将函数传递给使用lambdas的函数,请注意这是一个简化示例f0
,f1
和f...
将是数值导数:
// 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>
? 感谢您的时间。