我使用std::tie从元组初始化一些变量,如下所示:
int a1, a2;
std::tie(a1, a2) = tupleA;我想知道是否可以在不重复 std::tie的情况下使用多个元组来做到这一点:
int a1, a2, b1, b2;
std::tie(a1, a2) = tupleA,
(b1, b2) = tupleB;以上代码不编译。我希望在不重复std::tie的情况下获得以下内容
int a1, a2, b1, b2;
std::tie(a1, a2) = tupleA;
std::tie(b1, b2) = tupleB;其他类型
如果我想以int为例做同样的事情,我可以很容易地做到:
int a = 1,
b = 3;我不需要编写int b;仅用b就足够了。
有什么方法可以用std::tie来完成吗?
发布于 2020-04-01 20:32:20
没有办法在std::tie中做到这一点。std::tie是一个函数,而不是一个类型,因此您不能对它使用“变量创建语法”(int a = 1, b = 3;)。
如果可以更新为C++17,则可以使用结构化绑定进行转换
int a1, a2, b1, b2;
std::tie(a1, a2) = tupleA;
std::tie(b1, b2) = tupleB;转到
auto [a1, a2] = tupleA;
auto [b1, b2] = tupleB;这样你就不用打字了。
发布于 2020-04-01 21:15:20
首先我讨厌元组。
IMO (不得不强调这是我个人的观点)他们被过度使用,导致代码的可读性大大降低。
即使在当前的项目中,当我遇到作为返回类型的元组时,我也必须检查被调用函数的实现,以理解元组的某些部分的含义。
元组的目的是在编写复杂模板时提供一个存储未知类型复杂数据的工具。
关于这一专题:
你可以级联元组
auto [a1, a2, b1, b2] = std::tuple_cat(tupleA, tupleB);但我强烈建议您使用常规结构作为返回类型,而不是元组。
https://stackoverflow.com/questions/60979691
复制相似问题