gpt4 book ai didi

c++ - 嵌套的 std::function

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:11:44 28 4
gpt4 key购买 nike

有可能有一个std::function吗?返回 std::function并使用与其他 std::functions 递归的各种函数,比如函数的函数?换句话说,我想将一组函数折叠成一个函数。

例如脱离基础教程

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
}

它只是将一组函数“折叠”成一个函数。

如果这不是您的要求,请编辑您的原始问题以更清楚地说明您希望完成的任务。

关于c++ - 嵌套的 std::function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13984286/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com