7

这主要是理论上的,因为我总是可以拼出返回类型,但我想知道是否有办法告诉 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)。

4

1 回答 1

3

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

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

然后

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

诀窍吗?

于 2021-02-09T13:48:13.637 回答