首页 > 解决方案 > 创建具有不同返回类型的 lambda?

问题描述

我遇到了这种情况。假设我有一段代码,我想控制它的返回方式:

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 不返回。

标签: c++templateslambda

解决方案


我发现您的三元运算符有问题。根据文档:

三元运算符具有以下形式:

经验1?经验2:经验3

三元运算符具有返回类型。返回类型取决于 exp2,以及根据通常\重载转换规则将 exp3 转换为 exp2。如果它们不可转换,编译器会抛出错误。

是否可以给出该 foo 函数的一些用例?当它被调用时,你期望发生什么?有什么可能的情况吗?如果所有的 lambda 函数都具有相同的返回类型,您会遇到问题吗?例如你可以添加return false;在第二个功能?


推荐阅读