boost::fusion::map

boost::fusion::mapは、各要素に名前の付いたタプル(named tuple)として扱えます。
型に対して、対応する要素を割り当てます。

#include <boost/assert.hpp>
#include <boost/fusion/include/map.hpp>
#include <boost/fusion/include/at_key.hpp>

namespace fusion = boost::fusion;

struct x {};
struct y {};
struct z {};

typedef fusion::map<
    fusion::pair<x, int>,
    fusion::pair<y, int>,
    fusion::pair<z, int>
> vec;

int main()
{
    const vec v = {3, 1, 4};
    BOOST_ASSERT(fusion::at_key<x>(v) == 3);
    BOOST_ASSERT(fusion::at_key<y>(v) == 1);
    BOOST_ASSERT(fusion::at_key<z>(v) == 4);
}