AMDG Derrick Hathaway wrote:
Thank you, Sir, for your quick response. I just got around to testing it, and I've run into a snag. a fusion::vector is larger than the sum of it's parts, and I would like something that is not. In other words:
sizeof(vector<float, float>) != sizeof(float) + sizeof(float)
Please create a trac ticket for this. It looks like EBCO is not working properly, because the compiler refuses to allocate two instances of boost::fusion::sequence_root at the same address.
A tuple seems to fit, as I described earlier, but I'm not sure how to generalize this. I've thought that there might be a way to generalize a tuple to provide an interface like my_tuple<N, Type> using the cons. Any thoughts?
Unfortunately cons doesn't quite work because it it doesn't have the constructor you want. You can use the general mpl::inserter to create a specialization of tuple. #include <boost/mpl/transform.hpp> #include <boost/mpl/always.hpp> #include <boost/mpl/range_c.hpp> #include <boost/mpl/inserter.hpp> #include <boost/tuple/tuple.hpp> #include <boost/preprocessor/repetition/enum_params.hpp> #include <iostream> template<class Tuple, class T> struct tuple_push_front; template<BOOST_PP_ENUM_PARAMS(9, class T), class T> struct tuple_push_front<boost::tuple<BOOST_PP_ENUM_PARAMS(9, T)>, T> { typedef boost::tuple<T, BOOST_PP_ENUM_PARAMS(9, T)> type; }; // create a sequence of 5 elements typedef boost::mpl::range_c<int, 0, 5> range; // convert all the elements to float and make the result a fusion vector. typedef boost::mpl::transform<range, boost::mpl::always<float>, boost::mpl::inserter< boost::tuple<>, tuple_push_front<boost::mpl::_1, boost::mpl::_2> >
::type tuple_type;
int main() { tuple_type t(0, 1, 2, 3, 4); std::cout << typeid(tuple_type).name() << std::endl; } In Christ, Steven Watanabe