Manuel Jung
Hi,
I get as template parameter a mpl::vector with various types. Now want to generate one object of each type. To do so, i like to generate a fusion::map, which has as key the type itself (from the mpl::vector) and as object e.g. boost::promise_stream< type >.
Well this is what i've got so far:
<snip>
This compiles fine. But i'm not able to generate some fusion::map from the Out_type. I get compiling errors than. Well I'm new to the whole MPL and fusion stuff. Am i doing the right things? Or maybe my goal could be achived easier?
I don't have a compiler handy, so I couldn't attempt to compile your code to see if there was a simple fix, but the following should work (untested): namespace fusion = boost::fusion; namespace mpl = boost::mpl; template<typename T> struct make_out_signature_pair { typedef typename fusion::result_of::make_pair < T, boost::promise_stream<T> >::type type; }; template<typename OutSignatures> struct filter_impl { typedef typename fusion::result_of::as_map < typename mpl::transform < OutSignatures, make_out_signature_pairmpl::_1 >::type >::type OutMap; }; filter_impl<Sequence>::OutMap is now an instantiable fusion::map. Two noteworthy things: First, the value type of the map (e.g. boost::promise_stream) must be default constructable. Second, by default the maximum size of an mpl::vector is 20 and of a fusion::map is 10. So if you have 10+ elements in your OutSignatures sequence, you'll need to define the BOOST_MPL_LIMIT_VECTOR_SIZE and/or FUSION_MAX_MAP_SIZE macros before including any boost headers. See http://ln-s.net/2GhE and http://ln-s.net/2GhF for more details.