![](/img/trans.png)
[英]In C++, how to return different generic types depending on argument in a class?
[英]How to return two different lambda function depending on condition in C++?
我是 C++ 的初學者編碼器。 這是我根據條件返回兩個不同的 lambda(具有兩個不同的簽名)的代碼。
function<int (int)> sum (int a, int b) {
return [a, b](int c) {return a+b+c;};
}
function<int ()> constant (int x) {
return [x](){return x;};
}
auto findResult (bool doSum, int number1, int number2) -> decltype(doSum ? sum(number1, number2) : constant(number1)) {
if(doSum) {
return sum(number1, number2);
}else {
return constant(number1);
}
}
但我得到了以下錯誤。 難道我做錯了什么?。 我需要一些澄清。
function<int (int)> sum (int a, int b) {
return [a, b](int c) {return a+b+c;};
}
function<int ()> constant (int x) {
return [x](){return x;};
}
auto findResult (bool doSum, int number1, int number2) -> decltype(doSum ? sum(number1, number2) : constant(number1)) { //Incompatible operand types ('function<int (int)>' and 'function<int ()>')
if(doSum) {
return sum(number1, number2); //No viable conversion from returned value of type 'function<int (int)>' to function return type 'int'
}else {
return constant(number1); //No viable conversion from returned value of type 'function<int ()>' to function return type 'int'
}
}
C++ 程序在其 state 中具有編譯時間和運行時信息。
運行時信息類似於大多數變量值。 編譯時間信息是諸如什么類型變量之類的東西。
您不能將運行時信息轉換為編譯時信息。 這就是您的代碼正在嘗試做的事情。
在這里,根據doSum
的運行時值,您想要返回 function int(int)
或 function int()
。 該簽名是編譯時間信息。
可能有一種方法可以解決您的潛在問題,但您首先必須描述它。 例如,您可以返回std::variant<std::function<int()>, std::function<int(int)>>
。 但你也可能只是在這里犯了一個設計錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.