我可以让 lambda 推导出变体返回类型吗?

问题描述

这主要是理论上的,因为我总是可以拼出返回类型,但我想知道是否有办法告诉 lambda,返回类型应该是 lambda 主体中所有返回的 union(std::variant)。>

#include <iostream>
#include <variant>

struct A{
    int val = 47;
};

struct B {
    float val = 4.7;
};

int main()
{
    for (int i=0;i<8;++i){
                      // can this be something like -> auto_variant  (auto_variant is some library type)
        auto var = []()->std::variant<A,B> {
            if (rand()%2 ){
                return A{};
            } else {
                return B{};
            }
        }();
        std::visit ([](const auto& val) {std::cout<< val.val << std::endl;},var);
    }
}

注意:我强烈的感觉是答案是否定的,这是不可能的,但我很好奇是否有人知道一些技巧。

注意 2:使用 std::any 不符合我的要求,因为我希望在编译时知道 lambda 的返回类型,而不是在运行时(使用 any_cast)。

解决方法

你会发现我在作弊,但也许

using A_or_B = std::variant<A,B>;

然后

[]() {
  if (rand()%2) {
    return A_or_B{A{}};
  } else {
    return A_or_B{B{}};
  }
}

有技巧吗?

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...