C++ 从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 =

我有一个简单的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;
    };

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定义的