[MPL] Runtime Interaction
[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
Debian User <greened@obbligato.org> wrote:
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);
[...] Please see http://tinyurl.com/3ccex for a documented example and http://tinyurl.com/2q7hl for the compliable code along the lines of what you need. HTH, -- Aleksey Gurtovoy MetaCommunications Engineering
participants (2)
-
Aleksey Gurtovoy
-
Debian User