c++ 有没有办法把变量传递给std::make_tuple〈double,char,std::string>(var1,var2)?

quhf5bfb  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(103)

我想把变量名传递给std::make_tuple(),但是它不允许。我使用的是C++14,有什么方法可以达到我的目的吗?

std::tuple<int> get_student(int id)
{
    int gpa = 3;
    return std::make_tuple<int>(gpa);
}

这将抛出一个错误,指出“无法将类型为”int&&“的右值引用绑定到类型为”int“的左值”

kuuvgm7e

kuuvgm7e1#

我想把变量名传递给std::make_tuple()
我想你真正想要的是返回一个std::tuple<int>,而不需要make_tuple

std::tuple<int> get_student(int id)
{
    int gpa = 3;
    return gpa;
}

make_tuple用于从传递给元组构造函数的参数推导元组的类型,例如

auto get_student(int id)
{
    int gpa = 3;
    return std::make_tuple(gpa);
}

当你从一些变量推导出元组类型时,你不需要指定模板参数。
如果你确实想指定参数(而不是让它们被推导出来),你也不需要std::make_tuple

auto get_student(int id)
{
    int gpa = 3;
    return std::tuple<int>(gpa);
}

实际上,make_函数家族都是为了从它们的参数中推导出某种类型,在某些情况下,我们需要为make_tuple指定参数,但这种情况并不常见。
此外,自从C++17就有了CTAD(类模板参数演绎),这使得make_...的许多用法过时了。我在这里看到的代码中的大多数用法实际上只是unnecessary

相关问题