从 lambda 返回变体



我有这个简单的lambda:

std::variant<int, char> myLambda = []() { // no suitable user-defined conversion from "type" to "std::variant<int, char>" exists
std::variant<int, char> res;
if (true)
{
res = 1;
}
else
{
res = 'c'; 
}
return res;
};

但它不编译,产生错误no suitable user-defined conversion from "type" to "std::variant<int, char>" exists。我做错了什么?

要么你的意思

std::variant<int, char> v = []() {
std::variant<int, char> res;
if (true)
{
res = 1;
}
else
{
res = 'c'; 
}
return res;
}();
^^^

或者你的意思是

auto myLambda = []() {
std::variant<int, char> res;
if (true)
{
res = 1;
}
else
{
res = 'c'; 
}
return res;
};

Lambda 表达式具有唯一的类型。

lambda 表达式类型错误。您正在尝试绑定到std::variant<int, char>。Lambda 表达式类型名称是 impl 定义的。使用auto

auto processProjectFile = []() {
std::variant<int, char> res;
if (true) {
res = 1;
} else {
res = 'c'; 
}
return res;
};

或者,您可以将 lambda 类型转换为std::functionauto替换为std::function<std::variant<int, char>(void)>

但是,如果您打算调用 lambda,只需将末尾的};替换为}();即可。

最新更新