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