簡體   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