c – 嵌套的std :: function
发布时间:2020-12-16 07:34:16 所属栏目:百科 来源:网络整理
导读:有没有可能有一个std :: function返回一个std :: function并使用各种函数递归与其他std ::函数,比如一个函数的函数?换句话说,我想将一组函数折叠成一个函数. 例如,关闭基础教程 double genFunc(double x,std::functiondouble (double x)f){ double res = f(
有没有可能有一个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 } 这简单地将一系列函数“折叠”成一个函数. 如果这不是您要求的,那么请编辑您的原始问题,以便更清楚地了解您希望完成的任务. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |