| Tuples |

Tuples are the most basic infrastructure that the framework builds with. This sub-library provides a mechanism to bundle objects of arbitrary types in a single structure. Tuples hold heterogeneous types up to a predefined maximum.

Only the most basic functionality needed are provided. This is a straight-forward and extremely lean and mean library. Unlike other recursive list-like tuple implementations, this tuple library implementation uses simple structs similar to std::pair with specialization for 0 to N tuple elements, where N is a predefined constant. There are only 4 tuple operations to learn:

1) Construction

Here are examples on how to construct tuples:

`

        typedef tuple<int, char> t1_t;
        typedef tuple<int, std::string, double> t2_t;

        //  this tuple has an int and char members
        t1_t t1(3, 'c');

        //  this tuple has an int, std::string and double members
        t2_t t2(3, "hello", 3.14);

`

2) Member access

A member in a tuple can be accessed using the tuple's operator by specifying the Nth tuple_index. Here are some examples:

`

        tuple_index<0> ix0; // 0th index == 1st item
        tuple_index<1> ix1; // 1st index == 2nd item
        tuple_index<2> ix2; // 2nd index == 3rd item

        //  Note zero based indexing. 0 = 1st item, 1 = 2nd item

        t1[ix0] = 33;       // sets the int member of the tuple t1
        t2[ix2] = 6e6;      // sets the double member of the tuple t2
        t1[ix1] = 'a';      // sets the char member of the tuple t1

`

Access to out of bound indexes returns a nil_t value.

3) Member type inquiry

The type of an individual member can be queried. Example:

`

        tuple_element<1, t2_t>::type

`

Refers to the type of the second member (again note zero based indexing, hence 0 = 1st item, 1 = 2nd item) of the tuple.

Access to out of bound indexes returns a nil_t type.

4) Tuple length

The number of elements in a tuple can be queried. Example:

`

        int n = t1.length;

`

gets the number of elements in tuple t1.

length is a static constant. Thus, TupleT::length also works. Example:

`

        int n = t1_t::length;

`

Copyright © 2001-2002 Joel de Guzman
Use, modification and distribution is subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)