Construction and Initialization
A tuple type is a specialization, or an instance, of the class template tuple. The current library supports tuples with 0-10 elements. Each element may have a different type. In the following example, t is defined as a tuple type that contains two elements of type int and double:
#include <tuple>
tuple <int, double> t(1, 3.14);
For the sake of brevity, I do not use qualified names. The actual namespace in which tuple and its helper functions are declared depends on the library you're using. The Boost library declares them in boost::tuples. Standard C++ will declare them in std, as usual.
If you omit the initializers, default initialization will apply instead:
tuple <std::string, int*> u; //initialized to: string(),0
Helper Functions
To obtain a tuple's number of elements, use the tuple_size()function like this:
int sz=tuple_size <
tuple <int, const double, std::string> >::value;//3
The make_tuple()function facilitates the construction of tuple types. It creates a tuple type according to its arguments:
void f(int i);
T1=make_tuple(&f); // returns: tuple<void (*)(int)>
T2=make_tuple("hi", 2); // tuple< const char (&)[3], int>
tuple_element()returns the type of an individual element. This function takes an index and the tuple type:
//obtain the type of the first element
T=tuple_element <0, tuple<int, int, char> >::type;//int
>
If you need to access the actual element, not its type, use the get<N>()function. Note that tuples use zero-based indexing:
tuple <int, double> t;
int n=get<0>(t); //get 1st element
get<1>(t)=0.5; //assign 2nd element