有没有可能有一个std :: function返回一个std :: function并使用各种函数递归与其他std ::函数,比如一个函数的函数?换句话说,我想将一组函数折叠成一个函数.
例如,关闭基础教程
double genFunc(double x, std::function<double (double x)>f)
{
double res = f(x);
return res;
}
double square(double x){
return x * x;
}
double dbl_sq(double x){
return square(x * x);
}
如何修改它以允许嵌套的std :: function< std :: function>电话?
最佳答案 我不完全确定你在问什么,但我会捅它.
那么,你想要一个嵌套的std :: function,但是调用一次调用中的所有元素?那意味着你可以做几件事,但最简单的就是这样:
std::function<double(double)> nest(const std::function<double(double)> functions[], const int count) {
if (count == 1) {
return functions[0];
}
return [=](double input) {
return nest(functions + 1, count - 1)(functions[0](input));
};
}
int main()
{
static const auto sq = [](double input) {
return input * input;
};
static const auto dbl_sq = [](double input) {
return sq(input * input);
};
static const auto dbl = [](double input) {
return input * 2;
};
static const std::function<double(double)> sqrt = ::sqrt;
// now lets construct a 'nested lambda'
static const std::function<double(double)> funcs[] = {
sq, dbl, sqrt
};
static const std::function<double(double)> func = nest(funcs, 3);
std::cout << func(4) << std::endl; // 5.65685
std::cout << ::sqrt((4 * 4) * 2) << std::endl; // 5.65685
}
这简单地将一系列函数“折叠”成一个函数.
如果这不是您要求的,那么请编辑您的原始问题,以便更清楚地了解您希望完成的任务.