首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以在变量声明/初始化中使用多个std::tie而不重复std::tie吗?

可以在变量声明/初始化中使用多个std::tie而不重复std::tie吗?
EN

Stack Overflow用户
提问于 2020-04-01 20:24:44
回答 2查看 185关注 0票数 0

我使用std::tie从元组初始化一些变量,如下所示:

代码语言:javascript
复制
int a1, a2;
std::tie(a1, a2) = tupleA;

我想知道是否可以在不重复 std::tie的情况下使用多个元组来做到这一点:

代码语言:javascript
复制
int a1, a2, b1, b2;
std::tie(a1, a2) = tupleA,
  (b1, b2) = tupleB;

以上代码不编译。我希望在不重复std::tie的情况下获得以下内容

代码语言:javascript
复制
int a1, a2, b1, b2;
std::tie(a1, a2) = tupleA;
std::tie(b1, b2) = tupleB;

其他类型

如果我想以int为例做同样的事情,我可以很容易地做到:

代码语言:javascript
复制
int a = 1,
  b = 3;

我不需要编写int b;仅用b就足够了。

有什么方法可以用std::tie来完成吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-01 20:32:20

没有办法在std::tie中做到这一点。std::tie是一个函数,而不是一个类型,因此您不能对它使用“变量创建语法”(int a = 1, b = 3;)。

如果可以更新为C++17,则可以使用结构化绑定进行转换

代码语言:javascript
复制
int a1, a2, b1, b2;
std::tie(a1, a2) = tupleA;
std::tie(b1, b2) = tupleB;

转到

代码语言:javascript
复制
auto [a1, a2] = tupleA;
auto [b1, b2] = tupleB;

这样你就不用打字了。

票数 2
EN

Stack Overflow用户

发布于 2020-04-01 21:15:20

首先我讨厌元组。

IMO (不得不强调这是我个人的观点)他们被过度使用,导致代码的可读性大大降低。

即使在当前的项目中,当我遇到作为返回类型的元组时,我也必须检查被调用函数的实现,以理解元组的某些部分的含义。

元组的目的是在编写复杂模板时提供一个存储未知类型复杂数据的工具。

关于这一专题:

你可以级联元组

代码语言:javascript
复制
auto [a1, a2, b1, b2] = std::tuple_cat(tupleA, tupleB);

但我强烈建议您使用常规结构作为返回类型,而不是元组。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60979691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档