C++ 我们能用c++;1y std::tie()类函数?

C++ 我们能用c++;1y std::tie()类函数?,c++,c++11,c++14,tie,C++,C++11,C++14,Tie,有没有一种方法可以在c++11/1y中编写一个深入绑定到元组中的std::tie。也就是说,其中tie((x,y),z)=make_tuple(make_tuple(1,2),3)分别将x,y,z绑定到1,2和3,如下例所示。那太好了。谢谢 #include <tuple> #include <iostream> using namespace std; int main() { int x, y ,z; auto t = make_tuple(1,2);

有没有一种方法可以在c++11/1y中编写一个深入绑定到元组中的
std::tie
。也就是说,其中
tie((x,y),z)=make_tuple(make_tuple(1,2),3)
分别将
x,y,z
绑定到
1,2和3,如下例所示。那太好了。谢谢

#include <tuple>
#include <iostream>
using namespace std;

int main() {
  int x, y ,z;
  auto t = make_tuple(1,2);
  std::tie(y,x)= t;
  //std::tie((x,y),z) = make_tuple(t,3); //not working
  cout << x << y << z << endl;
  return 0;
}
#包括
#包括
使用名称空间std;
int main(){
int x,y,z;
自动t=生成元组(1,2);
std::tie(y,x)=t;
//std::tie((x,y,z)=make_tuple(t,3);//不工作

可能你在找的是
std::tuple\u cat

std::tie(x,y,z) = std::tuple_cat(t, make_tuple(3)); 
您可以将
元组
串在一起作为一个长元组,以避免处理嵌套元组。我认为扁平化嵌套元组的解决方案会更复杂


只是想澄清一下
std::tie
是如何工作的(我想)。
std::tie
从它的参数构造一个左值引用的元组。当你使用赋值运算符时,.
std::tie((x,y),z)
并没有按照你的想法去做。你在服从
(x,y)
到逗号运算符,其中x被丢弃。没有什么神奇之处,嵌套是由括号确定的。如果
std::tie
的一个参数是一个元组,那么相应的参数也应该是一个元组。即:
std::tie(tuple,3)=std::make_tuple(std::make_tuple(1,2),3)
。但是,这不是您想要的,这也是我的建议的来源,因为您似乎无意将嵌套元组展平。

您可以:

std::forward_as_tuple(std::tie(x, y), z) = std::make_tuple(t, 3);

std::forward\u as_tuple
的工作原理与
std::tie
非常相似,只是与之不同,它不会拒绝
std::tie(x,y)
作为一个论点。

谢谢你的解释。但我想找一个深结的方法。我不知道这是否可能,但会很方便。@TingL我明天早上会去看看,除非有人来回答。但我不清楚你说的深结是什么意思。@remabel,我的意思是,我们是否能打成结递归,即在RHS上绑定第一个组件时,检查该组件是否为元组。如果是,则解包第一个组件并将其组件绑定到LHS上的相应内容。下降直到没有元组类型,然后返回根元组的第二个组件。我怀疑这可能是因为模板程序部分C++本身是图灵完成的。可惜他们没有想到更短的名字。工作很好,看起来很丑陋。