C++ 从lambda返回变量
我有一个简单的lambda:C++ 从lambda返回变量,c++,lambda,variant,C++,Lambda,Variant,我有一个简单的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 =
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;
};
std::variant myLambda=[](){//不存在从“type”到“std::variant”的合适的用户定义转换
std::变体res;
如果(真)
{
res=1;
}
其他的
{
res='c';
}
返回res;
};
但是它没有编译,产生错误
不存在从“type”到“std::variant”的合适的用户定义转换。我做错了什么?lambda表达式类型错误。您正在尝试绑定到std::variant
。Lambda表达式类型名称是impl定义的。使用auto
:
auto processProjectFile = []() {
std::variant<int, char> res;
if (true) {
res = 1;
} else {
res = 'c';
}
return res;
};
自动处理项目文件=[](){
std::变体res;
如果(真){
res=1;
}否则{
res='c';
}
返回res;
};
或者,您可以将lambda类型强制转换为std::function
替换auto
为std::function
但是如果您打算调用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;
};
std::variant v=[](){
std::变体res;
如果(真)
{
res=1;
}
其他的
{
res='c';
}
返回res;
}();
^^^
或者你是说
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;
};
auto myLambda=[](){
std::变体res;
如果(真)
{
res=1;
}
其他的
{
res='c';
}
返回res;
};
Lambda表达式具有唯一的类型。您需要调用Lambda change最后一个代码>到}()代码>输入错误?@RichardCriten不,我只是想初始化lambda,而不是调用它。@RichardCriten但是,你让我明白了我的错误,谢谢!有两种解决方案的问题。。。。我建议错了。很高兴下面的答案对您有所帮助。可能:auto-myLambda=[&]()->std::variant{if(cond){return 1;}else{return'c';}是的,这就是我错过的。谢谢我犯了愚蠢的错误。顺便说一句,std::function
部分很方便!谢谢不确定您所说的ClosureType
是什么意思。lambda类型的名称是impl定义的