繁体   English   中英

如何在C ++中实现函数(f)(x)(y,z)(g)(r)?

[英]How to implement function(f)(x)(y, z)(g)(r) in C++?

我一直在尝试实现以下功能:

MonsterFunction(f)(x)(y,z)(g)(r);

其中f是一个接受三个参数的函数。 x, y, z是传递给函数f的参数,所有这些参数都传递给函数g ,参数r也传递给函数g并返回最终结果。

我已成功实现了MonsterFunction(f)(x)(y,z) ,但我无法弄清楚如何实现上述功能。

这是我已经完成的代码:

std::function<std::function<int(int, int)>(int)> MonsterFunction(std::function<int(int, int, int)> f){
    return [f](int x1){
        return[f, x1](int y1, int z1){
            return f(x1, y1, z1);
        };
    };
}

请记住,我只想用std::functionlambda-closure functions来实现这一点。

我实际上已经做到了,经过一段时间的休息,我能够实现它。 只要您仔细跟踪嵌套,这很容易。 这是我的最终代码:

std::function<std::function<std::function<std::function<int(int)>(int(int, int))>(int, int)>(int)> MonsterFunction(std::function<int(int, int, int)> f){
    return [f](int x1){
        return[f, x1](int y1, int z1){
            int result = f(x1, y1, z1);
            return [result](int g(int, int)){
                return[result,g](int r){
                    return g(result, r);
                };
            };
        };
    };
}

现在我能够进行类似MonsterFunction(Sum)(5)(5,4)(Multiply)(4)调用。

编辑

正如Quentin所建议的,使用auto作为返回类型使函数更简洁:

auto MonsterFunction(std::function<int(int, int, int)> f){
    return [f](int x1){
        return[f, x1](int y1, int z1){
            int result = f(x1, y1, z1);
            return [result](int g(int, int)){
                return[result,g](int r){
                    return g(result, r);
                };
            };
        };
    };
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM