tin*_*lyx 3 c++ tie c++11 c++14
有没有办法std::tie在c ++ 11/1y中编写一个与元组深深联系的变体.也就是说 ,分别tie((x,y),z) = make_tuple(make_tuple(1,2),3)绑定x, y, z到的一个1, 2 and 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;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
也许您正在寻找std::tuple_cat:
std::tie(x,y,z) = std::tuple_cat(t, make_tuple(3));
Run Code Online (Sandbox Code Playgroud)
您可以将它们串在一起tuples作为一个长元组,以避免处理嵌套元组.我认为扁平化嵌套元组的解决方案会更复杂.
只是为了澄清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);
Run Code Online (Sandbox Code Playgroud)
std::forward_as_tuple与的工作方式非常相似std::tie,不同之处在于它不会拒绝std::tie(x, y)作为参数。
| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |