簡體   English   中英

如何根據 C++ 中的條件返回兩個不同的 lambda function?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM