Return 来自 lambda 的变体
Return variant from a 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
。我做错了什么?
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::function
,用 std::function<std::variant<int, char>(void)>
替换 auto
。
但是如果你打算调用 lambda,只需将最后的 };
替换为 }();
。
你的意思是
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> 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
。我做错了什么?
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::function
,用 std::function<std::variant<int, char>(void)>
替换 auto
。
但是如果你打算调用 lambda,只需将最后的 };
替换为 }();
。
你的意思是
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 表达式具有独特的类型。