gpt4 book ai didi

c++ - 具有不同返回类型的函数变体

转载 作者:行者123 更新时间:2023-12-01 22:07:20 28 4
gpt4 key购买 nike

下面的代码无法编译:

#include <functional>
#include <variant>

int main() {
using ret_void = std::function<void()>;
using ret_int = std::function<int()>;

std::variant<ret_void, ret_int> var;
var.emplace([](){ return 1; } );
}

编译显示模板参数推导/替换失败。谁能解释一下为什么编译失败?

最佳答案

编译失败,因为 std::variant::emplace需要给出 emplace 的变体替代方案的类型或索引:

#include <functional>
#include <variant>

int main() {
using ret_void = std::function<void()>;
using ret_int = std::function<int()>;

std::variant<ret_void, ret_int> var;
var.emplace<ret_int>([](){ return 1; });
}

std::variant::emplace 所有重载的第一个模板参数 [variant.mod]是 emplace 的替代变体的索引或类型。这些重载都没有以可推导的方式使用此参数......

关于c++ - 具有不同返回类型的函数变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59401666/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com