Boost logo

Boost Users :

From: Debian User (greened_at_[hidden])
Date: 2004-04-15 10:48:04


[Sent via gmane but it never appeared]

Hi gang,

Suppose I have a number of types that each have a
"value" enum, much like MPL's constant classes.
Now suppose that I want to construct a
runtime-indexable array of those values,
according to the position of each type in an
MPL vector.

For example:

int values[3];

typedef boost::mpl::vector_c<int,10, 11, 12> values;

typedef some_magic_metafunction<values>::type runtime_function;

// values[0] = 10, values[1] = 11, values[2] = 12
runtime_function::fill_array(values);

The idea is that some_magic_metafunction<values> would
generate a type kind of like this:

template<typename TypeValueList, typename Index>
struct magic {
  static void fill_array(int *v) {
                       // Non-MPL type vector indexing -- could use an
                       // MPL iterator here
     v[Index::value] = TypeValueList<Index::value>::value;
     if (Index::value < distance<begin<TypeValueList>::type,
                                 end<TypeValueList>::type>::type::value) {
        magic<TypeValueList, Index::next>::fill_array(v);
     }
  };
};

Get it? The problem is that I don't know how to make MPL
transition from strictly compile-time to something
in-between. It can statically know the size of the
value array and the values themselves but it has to
fill the array "values" at runtime so that the values may
be indexed by runtime computations.

Any guidance?

Thanks!

                        -Dave


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net