How to use tuple return values with ease?
Emulating C++17 Structured Bindings in C++14
by John Bandela
From the article:
Bjarne Stroustrup back in Novemeber wrote a nice progress report, available here, of the Kona meeting. One of the proposals considered is called structured binding. The proposal addresses one of the inconveniences of returning multiple values from a function using tuples. While, it is very easy for a function to return multiple values, it is harder for the caller to use them. Here is an example from the write up.
consider the following function
tuple<T1,T2,T3> f() { /*...*/ return make_tuple(a,b,c); }If we want to split the tuple into variables without specifying the type, we have to do this;
auto t = f(); auto x = get<1>(t); auto y = get<2>(t); auto z = get<3>(t);The proposal puts forth the following syntax instead
auto {x,y,z} = f(); // x has type T1, y has type T2, z has type T3I am excited for this feature, and for C++17 in general. While waiting for C++17, I decided to see how close I could get with C++14. Here is the result.
auto r = AUTO_TIE(x,y,z) = f(); // x has type T1, y has type T2, z has type T3 // Unlike the C++17 feature, you need to use r.x instead of just x std::cout << r.x << "," << r.y << "," << r.z << "\n";
Add a Comment
Comments are closed.