[英]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::function
和lambda-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.