Создать лямбду с другим типом возврата? - PullRequest
0 голосов
/ 29 октября 2019

Я сталкиваюсь с этим делом. Предположим, у меня есть кусок кода, и я хочу контролировать способ его возврата:

bool foo() {
  auto doSomething1 = []() {
      return true;
  }
  auto doSomething2 = []() {
      // execute something but not return
  }

  auto finalLambda = condition ? doSomething1 : doSomething2

  if (case1) {
    finalLambda()
  }

  if (case2) {
    finalLambda()
  }
   ... ...

  return true;
}

Это правильный (хороший) способ добиться этого? doSomething1 возвращается, а doSomething2 - нет.

1 Ответ

0 голосов
/ 30 октября 2019

Вижу проблема с вашим троичным оператором. Согласно документации:

Тернарный оператор имеет следующую форму:

exp1? exp2: exp3

Тернарный оператор имеет тип возврата. Тип возврата зависит от exp2 и конвертируемости exp3 в exp2 согласно обычным \ перегруженным правилам преобразования. Если они не конвертируемы, компилятор выдает ошибку.

Можно ли привести какой-нибудь вариант использования этой функции foo? Что вы ожидаете, когда он будет вызван? Любой возможный сценарий? Есть ли проблема для вас, если все лямбда-функции имеют одинаковый тип возврата? Например, вы можете добавить return false; во второй функции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...