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 表达式具有独特的类型。