我有这个简单的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::function
将auto
替换为std::function<std::variant<int, char>(void)>
。
但是,如果您打算调用 lambda,只需将末尾的};
替换为}();
即可。