[fusion] How to transform types of fusion::map ?
A very concrete question: I have map<pair<K1, V1>, pair<K2, V2>, ..> as input. How do I produce map<pair<K1, std::vector<V1> >, pair<K2, std::vector<V2>, .. > on output? I do not see an equivalent of LISPs MAPCAR in the list of algorithms.. Is this something that should be done by combining fold and push_back algorithms? If so, I'm currently in the dark on how to do it (no example for the fold metafunction algorithm) === Few more questions now that I'm already posting: - what is the difference between accumulate and fold? - what is the purpose of for_each metafunction when the docs say that it always returns void? (and no side-effects are possible at compile-time) Thanks.
Hi Zeljko, On Wed, Sep 17, 2008 at 8:25 AM, Zeljko Vrba <zvrba@ifi.uio.no> wrote:
A very concrete question:
I have map<pair<K1, V1>, pair<K2, V2>, ..> as input. How do I produce map<pair<K1, std::vector<V1> >, pair<K2, std::vector<V2>, .. > on output?
Take a look at `transform` (algorithm/transformation/transform in the docs), I think that should work for you. If you are only interested in transforming the type, mpl::transform might work better (fusion's transform is lazy, so to get the map type out you'd also need `result_of::as_map` (container/conversion/metafunctions in the docs)). If you want to use mpl's transform on a fusion map, #include <boost/fusion/include/mpl.hpp>
- what is the purpose of for_each metafunction when the docs say that it always returns void? (and no side-effects are possible at compile-time)
fusion is not just compile-time - the types are compile time but the values are run-time. Regardless, the function invoked by for_each can have side-effects (there is also an mpl for_each which is useful). Best, Stjepan
On Wed, Sep 17, 2008 at 10:10:41AM +0200, Stjepan Rajko wrote:
Take a look at `transform` (algorithm/transformation/transform in the
For anyone else who might be interested, transform_view seems to do the trick: // Metafunction to convert from T=pair<K, V> to pair<K, std::vector<V>>. struct t2v { template<typename T> struct result; template<typename T> struct result<t2v(T)> { typedef typename boost::remove_reference<T>::type pair_type; typedef BF::pair< typename pair_type::first_type, std::vector<typename pair_type::second_type> > type; }; }; template<typename BaseMap> struct x : public BF::result_of::as_map<BF::transform_view<BaseMap, t2v> >::type { .. }; [BF is my shorthand for boost::fusion]
Sorry to interrupt all, I am a newer for python/boost.python from c++, I want to use boost.python to extend python in Windows/VS2008, and I have download a installer and instal it from: http://www.boostpro.com/products/free I see some pages on the net that they say boost.python should be compile first before use, Now I have a question, Do i need to compile boost.python after I instal the installer? (from the installer, I think I don't need to compile it again ) If you can help me, just reply to me Separately or tell me through my MSN: way418@hotmail.com Thank you for all. _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
on Wed Sep 17 2008, "Liu yang" <liuyang1-AT-hisense.com> wrote:
Sorry to interrupt all,
I am a newer for python/boost.python from c++, I want to use boost.python to extend python in Windows/VS2008, and I have download a installer and instal it from: http://www.boostpro.com/products/free
I see some pages on the net that they say boost.python should be compile first before use, Now I have a question, Do i need to compile boost.python after I instal the installer? (from the installer, I think I don't need to compile it again )
You do not need to rebuild the boost.python library binaries unless you need to use build options that are incompatible with the binaries provided by the installer -- Dave Abrahams BoostPro Computing http://www.boostpro.com
participants (4)
-
David Abrahams
-
Liu yang
-
Stjepan Rajko
-
Zeljko Vrba